てくなべ (tekunabe)

ansible / network / automation

[Ansible/AWX] ワークフローですべてのジョブが正常で収束したときみ処理を進めるには(CONVERGENCEオプション)

はじめに

Ansible Tower と、そのアップストリーム版である AWX には、ワークフローという機能があります。 ワークフローは、ジョブテンプレート(Playbook + α のオブジェクト)を複数つなぎあわせて、一連の処理を組み上げる機能です。

ワークフローは以下のように、複数ジョブに分岐して、また一つのジョブに収束するする流れも作れます。

これまでは、収束前のジョブがいずれでも正常であれば次のジョブの進む、という仕様でした。 AWX 9.2.0 から、次のジョブに進む条件を選択(すべて/ANY)できるようになりました。

この記事では、設定方法をご紹介します。

  • 動作確認環境
    • AWX 10.0
    • 言語: 日本語

(なお、Ansible Tower の現在の最新版 3.6.3 にはまだ実装されていないようです。これからに期待です。)

[2020/05/19 追記] Ansible Tower 3.7.0 で実装されたようです。

Release Notes — Ansible Tower Release Notes v3.7.0

Added the ability to configure the convergence behavior of workflow nodes with the implementation of the ALL node, which requires that every single parent meets the “run on” conditions before continuing


■ 設定する箇所

ワークフロービジュアライザーでジョブテンプレートを配置する際、以下のように「CONVERGENCE」という項目があります。

f:id:akira6592:20200402202755p:plain
実行のための収束条件を指定できる

ここで、すべてANY を選択します。

f:id:akira6592:20200402202845p:plain
選択できる2つのオプション

  • すべて: 収束前のジョブがすべて正常ならこのジョブを実行する(新たな選択肢)
  • ANY: 収束のジョブのいずれかが正常ならこのジョブを実行する(もともとはこちらで固定)


すべて を選択した場合

CONVERGENCEで すべて を選択すると、ジョブテンプレートのノードの上に「ALL」というマークが付きます。

f:id:akira6592:20200402202910p:plain
「ALL」がつく

続いて、このジョブテンプレートのノードに収束するように、成功時の線を結びつけます。

f:id:akira6592:20200402202932p:plain
収束させる

実際にしたときの画面です。収束前の一番下のジョブテンプレートのノード tower-sapmle-fatal でエラーが発生したため、収束後のノード tower-sample-test は実行されていません。

f:id:akira6592:20200402202955p:plain
収束前のノードがすべて正常でないと実行されない


■ (参考)ANY を選択した場合

今までの動作条件はこちらで固定です。参考までに載せておきます。

CONVERGENCEで ANY を選択した場合は、特にマークは付きません。

f:id:akira6592:20200402203114p:plain
特にマークは付かない

実際にしたときの画面です。収束前の一番上のジョブテンプレートのノード tower-sapmle-fatal がエラーですが、ANY であるため、収束後のノード tower-sample-test が実行されました。

f:id:akira6592:20200402203227p:plain
収束前のジョブいずれかが成功すればこのジョブは実行される

左上のステータス通り、ワークフロージョブとしては「失敗」となりました。


■ おわりに

収束時の条件が選べるようになったことは、柔軟にワークフローを組めるようになって便利だと思いました。