Ansible TowerのOSS、AWXでAnsibleの実行管理をする
AWX をご存知でしょうか。 Ansible Tower の OSS 版として公開された、 Web インターフェイスと REST-API を持った Ansible の実行管理ができるプロダクトです。 今まで Ansible を使う時、実行者がそれぞれのマシンで実行したり、それを避けて Jenkins などを用意してそこで実行したりなど、 きっちり実行環境を管理するには面倒な部分がありました。 AWX を使うと、ジョブとして playbook の実行を管理できたり、ジョブをスケジュール実行できたりと、中央集権で実行管理をすることができるので色々とハッピーになります。
公式ドキュメントはこちら。
実際 Ansible Tower は使ったことがないのですが、ドキュメントも同じなので同一のものと思って良さそうです。 今回はこちらの Git リポジトリを使い、 Vagrant 上に AWX のホストを立ててお試ししてみます。
vagrant up だけで AWX が立ち上がります。 VM の構成は以下のようになっています。 server-01 はただの playbook 実行先として用意したサーバです。 *1
+--------+ +-----------+
| awx-01 |-- ssh -->| server-01 |
+--------+ +-----------+
:80 :80
^ ^
| |
:10080 :11080
localhost
ブラウザで localhost:10080 にアクセスしてみましょう。デフォルトの system administrator の ID は admin 、 パスワードは password でログインできます。

LDAP 連携を設定してユーザ管理をすることもできますが、今回はユーザやチーム、組織の設定は割愛します。 ではさっそく playbook 実行の準備をしていきましょう。
まずは AWX から playbook 実行対象のサーバへの credential を登録します。
今回の例では Vagrant で作成したホストの vagrant ユーザに ~/.vagrant.d/insecure_private_key を使用しているので、これを流用して Machine タイプの credential を登録しましょう。

credential が用意できたらメインとなる project を登録します。 playbook を含む Git リポジトリを設定するのが一般的でしょうか。例では https://github.com/innossh/awx-example.git を設定してください。もしプライベートリポジトリを使用する場合は、 SCM 用の credential を登録しそれを設定してあげる必要があります。

登録後は自動的に Git リポジトリの clone が始まるので、失敗している場合は設定を見直してください。
続いて playbook 実行対象のサーバの inventory を登録します。 host や group は手動で入力して登録することもできますが、先ほど Git リポジトリをプロジェクトに登録したのでそれを使うこともできます。

一度保存した後、 ADD SOURCE を選択してリポジトリ内のファイルから対象の inventory を選んであげてください。例では files/inventory にある inventory を選びます。

sync をすると、 hosts にサーバが現れます。

ここまで準備できたら job template を作成します。今回は Nginx をインストールするジョブを登録してみましょう。

登録した credential や project を選んで job template に設定します。 例では files/nginx.yml があるのでそれを使います。 PROMPT ON LAUNCH にチェックを入れると、ジョブ実行時にプロンプトでパラメータを選択することができるようになります。

最後にジョブを実行しましょう!ボタンをポチるだけです。
Vagrant で立てたもう一つのVM、 server-01 が inventory 指定されているので、 AWX から そのホストに playbook が実行されます。

実行後は playbook の出力をほぼリアルタイムで確認することができます。便利ですね!

ちゃんと server-01 に Nginx がインストールされたかどうか、ブラウザで localhost:11080 にアクセスしてみましょう。 Nginx のデフォルトページが表示されたら完了です。
はじめは AWX での用語や構造が慣れずに設定することが多いようにも感じますが、 REST-API と CLI も提供されているので、ジョブテンプレートの作成など Web ブラウザを使わずに CLI で行う方が簡単かもしれません。 ただ tower-cli はまだ発展途中ということもあり完璧なものではないので GitHub の issue を確認するなど気をつけましょう。
AWX によってチームで Ansible を使う場合に環境が共通化できてとても良いですね。 Slack への通知機能なども揃っています。リリースの自動化やバッチの定期実行など使い方は様々、これで Ansible ライフが更に快適になりそうです。