Event-Driven Ansible の始め方

皆さんこんにちは、Red Hat の岡野です。

前回の『Ansible Lightspeed の始め方』に引き続き、AAP 2.4 のもう 1 つの注目の新機能、Event-Driven Ansible (EDA) のお試し方法についてご紹介したいと思います。EDA を利用することにより、IT 運用において発生する様々なイベントを自動的に処理することが可能となります。EDA の概要は、こちらをご確認ください。

1. EDA と環境概要

Event-Driven Ansible (以下 EDA)は、Ansible Automation Platform 2.4 (AAP 2.4) から新たに追加された GUI サービスを提供するコンポーネントです。AAP 2.3 までは、Ansible Automation Controller (AAC) と Private Automation Hub (PAH) の 2つが GUI サービスを持つコンポーネントとして提供されてていましたが、3 つめのコンポーネントとして、EDA Controller が追加されました。

今回はイベントソースに webhook を利用し、EDA Controller と AAC を連携させた動作を確認してみます。

構成
・EDA Controller
・Ansible Automation Controller (AAC)
・PostgreSQL (for EDA Controller & AAC)

イベントソース
・webhook

2. EDA のインストール方法

EDA のインストールは簡単です。AAC や PAH と同様、Inventory ファイルに EDA の情報を記載するだけで OK です。詳細は以下のドキュメントをご確認ください。

access.redhat.com

マニュアルにも構成例とその際の Inventory ファイルが記載されていますが、AAC と EDA Controller を 外部 DB 共有の形でインストールする場合、Inventory ファイルを以下のように記載すればインストールできると思います。

[automationcontroller]
aap.example.com

[automationedacontroller]
eda.example.com

[database]
db.example.com

[all:vars]
admin_password='<your_password>'

pg_host='db.example.com'
pg_port=5432

pg_database='awx'
pg_username='awx'
pg_password='<your_password>'
pg_sslmode='prefer'  # set to 'verify-full' for client-side enforced SSL

registry_url='registry.redhat.io'
registry_username='<registry username>'
registry_password='<registry password>'

receptor_listener_port=27199

automationedacontroller_admin_password='<your_password>'

automationedacontroller_pg_host='db.example.com'
automationedacontroller_pg_port=5432

automationedacontroller_pg_database='automationedacontroller'
automationedacontroller_pg_username='automationedacontroller'
automationedacontroller_pg_password='<your_password>'

3. EDA の使い方

では、実際に EDA Controller と AAC の設定を行い連携動作させてみましょう。これには以下のような作業が必要となります。

3-1. Rulebook の作成と Github 上への配置

今回、Rulebook は以下を使います。すべてのホストからの webhook を5000番ポートで待ち受け、webhook のイベントを受け取ったら、 その中のメッセージを確認し、Ansible is super cool という文字列と一致した場合に、 AAC 内にあらかじめ作成された Demo Job Template というジョブテンプレートを実行するというものです。

---
- name: Listen for events on a webhook
  hosts: all
  sources:   
    - name: Wait for Webhook Message
      ansible.eda.webhook:
        host: 0.0.0.0
        port: 5000
  rules:
    - name: Say Hello
      condition: event.payload.message == "Ansible is super cool"
      action:
        run_job_template:
          name: Demo Job Template
          organization: Default

Rulebook は、Git 上に配置する必要があります。AAC ではローカルホルダーもサポートされていますが、EDA は現時点では、ローカルパスはサポートされていません。また、Git上での配置場所ですが、各リポジトリの extensions/eda/rulebooks 配下に置く必要があります。今回は、こちらを利用します。勿論、ご自身の Github 上において利用いただいてもかまいませんが、Rulebook を配置するパスに注意ください。

3-2. EDA → AAC の認証情報の設定

今回、EDA Controller から AAC に接続しジョブテンプレートを稼働させる必要があります。このため何かしらの認証の仕組みが必要になるのですが、EDA Controller と AAC 間の認証にはトークンを使います。作業は簡単です。まずは、AAC 側で、『ユーザー』→『admin』→『トークン』と進み、『範囲』で『書き込み』を選択、保存します。保存をクリックするとトークンが表示されますので、クリップボードにコピーします。

次は、コピーした AAC トークンの EDA Controller へのペースト作業です。EDA Controller で『ユーザー』→『admin』→『コントローラートークン』と進み、『コントローラートークンの作成』をクリック。『トークン』に先ほどAACからコピーしたトークンをペーストして、『コントローラートークンの作成』をクリックします。これで EDA Controller と AAC の認証設定は終了です。

3-3. Rulebook のアクティベーション

ここまで準備ができれば、Rulebook のアクティベーションが可能です。まずはプロジェクトで Rulebook が存在する Git の URL を定義します。SCM のURLは、https://github.com/hiro52/eda_demo/です。

いよいよルールのアクティベーションです。左ペインで『ルールブックのアクティベーション』を選択し、適当に名前を入力、先ほど作成したプロジェクトを選択し、『ルールブック』で、eda_test.yml を選択します。決定環境は、Default Decision Environment を選択。

『ルールブックのアクティベーションの作成』をクリックすると、以下のように、ルールブックのアクティベーションステータスが『実行中』となります。

3-4. 動作確認

では、実際に webhook で文字列を投げて動作を確認してみましょう。Firewall などのポートの制限がなく、EDA に接続可能な適当なホスト上(EDA 上でも勿論OK)で以下のコマンドを実行して、EDA Controller に webhook を介してメッセージ Ansible is super cool を送ってみます。

$ curl -H 'Content-Type: application/json' -d "{\"message\": \"Ansible is super cool\"}" <EDA FQDN>:5000

設定に間違いがなければ、AAC 上で、Demo Job Template が起動します。ご確認ください。

5. まとめ

いかがでしたでしょうか。Event-Driven Ansible は IT 運用で発生する様々なイベントを自動的に処理することが出来ます。今回は、ソースとして Webhook を直接コマンドでたたくという簡易的動作確認を行いましたが、次回は、実際のアプリケーションをソースとした連携についてデモ動画を交えてご説明したいと思います。

* 各記事は著者の見解によるものでありその所属組織を代表する公式なものではありません。その内容については非公式見解を含みます。