Ansible Tower 3.6の新機能について個人的まとめ

# はじめに
Ansible Tower3.6が遂にリリースされました。
Ansible Tower3.5のフルサポートが切れる(*1)目前で、何時リリースされるかハラハラされていましたが、やっとリリースされました。しかも、個人的に待ち望んでいた機能も実装されたので、備忘がてらブログとして残したいと思います。

*1
Ansible Towerのライフサイクルとして、リリースされて半年足らずで、「End of Full Support	」が切れてしまいます。。
https://access.redhat.com/support/policy/updates/ansible-tower

# 検証環境
今回はAWSのEC2環境で検証しました。検証で使用したバージョンは以下です。

- Red Hat Enterprise Linux 8
- Ansible 2.9.1
- Ansib Tower 3.6.1

# インストール
インストールの方法については割愛します。詳細は以下URLをご参照ください。
https://docs.ansible.com/ansible-tower/latest/html/quickinstall/install_script.html

インストーラには、通常版とバンドル版が存在します。通常版とバンドル版の違いは、通常版は、インストールの過程で必要なパッケージがインターネットからダウンロードされますが、バンドル版の場合は、インストーラ内にすべてのパッケージが内包されています。データセンター内などインターネットにアクセスできない環境でAnsible Towerをインストールするときは、バンドル版をお勧めします。
https://docs.ansible.com/ansible-tower/latest/html/quickinstall/download_tower.html#bundled-install

- 通常版パッケージ  
https://releases.ansible.com/ansible-tower/setup/?extIdCarryOver=true&sc_cid=701f2000001OH7YAAW
- バンドル版パッケージ*2  
https://releases.ansible.com/ansible-tower/setup-bundle/?extIdCarryOver=true&sc_cid=701f2000001OH7YAAW

*2
小ネタです。バンドル版のパッケージの中身をのぞいてみると、Ansible2.9.1のRPMパッケージが存在します。インターネット上のリポジトリにまだ存在しない最新パッケージがある場合があるので、地味にうれしいです。

```
$ tar xzfv ansible-tower-setup-bundle-latest.el8.tar.gz
$ cd ansible-tower-setup-bundle-3.6.1-1.el8
$ cd bundle/repos/ansible-tower-dependencies
$ ls
ansible-2.9.1-1.el8.noarch.rpm　←RHEL8版のAnsible2.9のRPMパッケージが存在する。
sshpass-1.06-3.el8ae.x86_64.rpm ←Ansibleをインストールするとき、一緒にインストールする必要がある。
(省略)
$ sudo rpm -ivh ansible-2.9.1-1.el8.noarch.rpm sshpass-1.06-3.el8ae.x86_64.rpm
Verifying...                          ################################# [100%]
Preparing...                          ################################# [100%]
Updating / installing...
   1:sshpass-1.06-3.el8ae             ################################# [ 50%]
   2:ansible-2.9.1-1.el8              ################################# [100%]
$ ansible --version ←インストールできている。
ansible 2.9.1
  config file = /etc/ansible/ansible.cfg
  configured module search path = ['/home/ec2-user/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python3.6/site-packages/ansible
  executable location = /usr/bin/ansible
  python version = 3.6.8 (default, Apr  3 2019, 17:26:03) [GCC 8.2.1 20180905 (Red Hat 8.2.1-3)]
```

# ライセンス投入
Webブラウザ経由で、Ansible TowerのGUIにアクセスしますと、ライセンス投入画面が表示されます。今回は検証のため、評価版ライセンスを投入しました。こちらも詳細は割愛します。
https://docs.ansible.com/ansible-tower/latest/html/quickstart/import_license.html


# [新機能1] ワークフローテンプレートに承認フローの追加
<font color="Red">1番待ち望んでいた機能です!!Jenkinsでいう承認フロー(Input Step)機能がついに実装されました。これで本番環境に設定を投入する直前に、進めるか止めるかの判断をしたいという、よく聞く課題がAnsible Towerで解決することができます。</font>

1. [ワークフローテンプレート]を新規作成します。
![1.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192426/f36ef4e7-9259-b25a-d4ef-f37e58c893cb.jpeg)

2. ワークフローテンプレート名を記入して保存します。
![2.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192426/1dcf98ab-d5e5-d7cc-ddda-a170f9e00858.png)

3. [ワークフロービジュアライザー]画面でワークフローを作成します。承認用ジョブテンプレートの作成方法は、[Approval]を選択し、そしてテンプレート名を記入するだけです。<font color="Red">TIMEOUTは、ワークフローテンプレートを実行時、承認フェーズでどの位待機するかの時間を決めることができます。デフォルトの「0min0sec」の場合、無期限です。
</font>
![3.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192426/3a2576a9-87f5-1365-0675-097c631a13eb.png)

4. ワークフローテンプレートを実行し、承認用ジョブに到達すると、[ベルのマーク]に赤いマークが表示されるのでクリックします。
![4.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192426/7c69dd63-bd46-f1e0-1788-c1b1c6e3cba0.png)

5. 表示される通知欄で[Approve]をクリックしますと、次のジョブが実行されます。
![5.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192426/25939451-9e35-6148-58f1-687fee7ee93b.png)


# [新機能2] 通知メッセージのカスタマイズ機能追加
テンプレート実行時の通知メッセージをカスタマイズできる機能です。メッセージの中に決められた変数を埋め込むことできます。
詳細については以下URLをご参照ください。
https://docs.ansible.com/ansible-tower/latest/html/userguide/notifications.html#create-custom-notifications
メッセージ内で使える変数については以下をご参照ください。
https://docs.ansible.com/ansible-tower/3.6.1/html/installandreference/notification_parameters_supported.html#ir-notifications-reference

使用方法や詳細な機能の説明については割愛させて頂いて、ここでは、個人的に便利と感じた機能についてご紹介します。
<font color="Red"> {{ job_metadata }} </font>
上記変数は、テンプレート名や実行結果などのメタデータをJSON形式で出力させる変数ですが、設定するテンプレートの種類によって出力させる内容が変わるちょっと特殊な変数です。ここではWork flow Job Templateに設定した結果について説明します。

例として、以下ワークフロージョブテンプレートを用意します。2つ目のジョブテンプレートの後に、成功後と失敗後にそれぞれ更にジョブテンプレートを設定しています。
![6.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192426/040ca175-dc6b-a9ed-c9b3-81b7f0ae5003.png)

Slack通知*3のカスタマイズ設定で、成功時のメッセージを以下に修正します。
![7.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192426/f83b9735-6c7d-4a17-5acc-70619a49d85b.png)
*3 Slack通知の設定についは、以下ブログが非常に分かりやすかったです。(ただし、差分としてわたしのSlack環境では、対象チャンネルで ``/invite @bot名``を実行しないと対象botを参加できませんでした。)
https://qiita.com/tonishy/items/ee62da3aec34218d24f6


実際にワークフロージョブテンプレートを実行して、Slackに通知された結果です。2つ目のジョブが成功した場合と失敗した場合で見比べてみましょう。
【成功した場合】
![8.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192426/d7cf2b7b-607a-4a3f-04c7-d39cce7deaab.png)
【失敗した場合】
![9.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192426/0a98fb07-89bf-7e96-3011-7b7938aeccba.png)
bodyの値を確認すると、ワークフロジョブテンプレートで実行されたジョブの名前と結果が出力されています。注目して欲しいのは赤枠の部分です。2つ目のジョブの結果(成功 or 失敗)が表示されています。
<font color="Red">今まで、ワークフロージョブテンプレートを実行した結果、成功だが、すべてのジョブが成功しての成功なのか、それとも、途中のジョブは失敗した上で成功なのか、通知されたメッセージからは判断することができませんでした。少しメッセージの内容が煩雑になりますが、{{ job_metadata }}を使用すれば、この課題が解決できるのではと思いました。</font>