はじめに
Event-Driven な Ansible を実現するために去年から ansible-rulebook が登場しました。
今年は先日の AnsibleFest での発表頃から更に話が進み、Event-Driven Ansible の実行基盤とも言える、EDA (Evnet-Driven Ansible) Controller の足音が聞こえてきました。
AAP 2.4 に導入される予定とのことです。
それに先立ってということか、本日 ansible/eda-server
というリポジトリが公開されました。
README.md には以下のような説明があります。
This repository contains the source code for the Event Driven Ansible Controller, aka EDA-Controller.
(補足: もともと同名のリポジトリはあったのですが、少し前に eda-server-prototype
という名前に変更され、しばらくメンテナンスもされていません)
ドキュメントを見ると、デプロイ方法として docker-compose と minukube があるようです。この記事では、docker-compose でデプロイした結果を簡単にまとめます。ドキュメントどおりです。
以降、念のため AAP のプロダクトとして EDA Controller と区別するために eda-server
と表記します。
- 環境
[2023/06/27 追記] AAP 2.4 としての EDA Controller のドキュメントも公開されました、
デプロイ
git clone
まずリポジトリごと clone します。
git clone [email protected]:ansible/eda-server.git
なお、ドキュメントには、リポジトリ名が ansible/aap-eda
とありますが、何かの名残が残ってるだけで誤りです。(修正PR提出済み)
AWX 連携設定
おそらくイベント受信時のアクションとして AWXやAutomation Controller のジョブテンプレートを実行するための目的だと思いますが、連携のための設定として環境変数を指定します。
export EDA_CONTROLLER_URL=https://10.0.1.140 export EDA_CONTROLLER_SSL_VERIFY=no
ただデプロイするだけであれば不要そうです。
docker-compose
docker-compose*.yml
系のファイルがあるディレクトリに移動します。
cd tools/docker
一応ドキュメント通り、まず pull
します。
docker-compose -p eda -f docker-compose-stage.yaml pull
こんなログが出ました。
# ログ % docker-compose -p eda -f docker-compose-stage.yaml pull [+] Pulling 55/6 ✔ eda-worker Skipped - Image is already being pulled by eda-api 0.0s ✔ redis 5 layers [⣿⣿⣿⣿⣿] 0B/0B Pulled 66.8s ✔ eda-ui 13 layers [⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿] 0B/0B Pulled 74.2s ✔ postgres 13 layers [⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿] 0B/0B Pulled 149.6s ✔ podman 8 layers [⣿⣿⣿⣿⣿⣿⣿⣿] 0B/0B Pulled 184.4s ✔ eda-api 10 layers [⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿] 0B/0B Pulled
続いて up
します。
docker-compose -p eda -f docker-compose-stage.yaml up
こんなログがでました。
# ログ % docker-compose -p eda -f docker-compose-stage.yaml up [+] Building 0.0s (0/0) [+] Running 9/9 ✔ Network eda_default Created 0.5s ✔ Volume "eda_postgres_data" Created 0.1s ✔ Container eda-redis-1 Created 2.8s ✔ Container eda-podman-1 Created 2.7s ✔ Container eda-postgres-1 Created 2.7s ✔ Container eda-eda-worker-2 Created 0.8s ✔ Container eda-eda-api-1 Created 0.8s ✔ Container eda-eda-worker-1 Created 0.8s ✔ Container eda-eda-ui-1 Created 0.3s Attaching to eda-eda-api-1, eda-eda-ui-1, eda-eda-worker-1, eda-eda-worker-2, eda-podman-1, eda-postgres-1, eda-redis-1 eda-redis-1 | 1:C 22 Jun 2023 08:33:57.341 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo eda-redis-1 | 1:C 22 Jun 2023 08:33:57.350 # Redis version=7.0.11, bits=64, commit=00000000, modified=0, pid=1, just started eda-redis-1 | 1:C 22 Jun 2023 08:33:57.350 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf eda-redis-1 | 1:M 22 Jun 2023 08:33:57.352 * monotonic clock: POSIX clock_gettime eda-redis-1 | 1:M 22 Jun 2023 08:33:57.362 * Running mode=standalone, port=6379. eda-redis-1 | 1:M 22 Jun 2023 08:33:57.362 # Server initialized eda-redis-1 | 1:M 22 Jun 2023 08:33:57.363 * Ready to accept connections eda-postgres-1 | The files belonging to this database system will be owned by user "postgres". eda-postgres-1 | This user must also own the server process. ...(略)... eda-eda-api-1 | 2023-06-22 08:34:57 [INFO ] Superuser created eda-eda-api-1 | 2023-06-22 08:34:57 [INFO ] User: admin eda-eda-api-1 | 2023-06-22 08:34:57 [INFO ] Password: testpass eda-eda-api-1 | 2023-06-22 08:34:57 [INFO ] Email: admin@test.com ...(略)... a-eda-api-1 | Starting ASGI/Daphne version 4.0.0 development server at http://0.0.0.0:8000/ eda-eda-api-1 | Quit the server with CONTROL-C. eda-eda-api-1 | 2023-06-22 10:48:36,536 INFO HTTP GET /_healthz 200 [0.03, 127.0.0.1:37302] eda-eda-ui-1 | /docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration eda-eda-ui-1 | /docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/ eda-eda-ui-1 | /docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh eda-eda-ui-1 | 10-listen-on-ipv6-by-default.sh: info: can not modify /etc/nginx/conf.d/default.conf (read-only file system?) eda-eda-ui-1 | /docker-entrypoint.sh: Sourcing /docker-entrypoint.d/15-local-resolvers.envsh eda-eda-ui-1 | /docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh eda-eda-ui-1 | /docker-entrypoint.sh: Launching /docker-entrypoint.d/30-tune-worker-processes.sh eda-eda-ui-1 | /docker-entrypoint.sh: Configuration complete; ready for start up ...(以降、30秒ごとに /_healthz あての GET のログ)...
ちなみに docker-compose ps
はこんな感じでした。DB や Redis もいますね。
% docker-compose -f docker-compose-stage.yaml ps NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS (a7) akira@mbp16 docker % docker-compose -p eda -f docker-compose-stage.yaml ps NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS eda-eda-api-1 quay.io/ansible/eda-server:main "/bin/bash -c 'aap-e…" eda-api 2 hours ago Up 3 minutes (healthy) 0.0.0.0:8000->8000/tcp eda-eda-ui-1 quay.io/ansible/eda-ui:main "/docker-entrypoint.…" eda-ui 2 hours ago Up 2 minutes 80/tcp, 0.0.0.0:8080->8080/tcp eda-eda-worker-1 quay.io/ansible/eda-server:main "aap-eda-manage rqwo…" eda-worker 2 hours ago Up 3 minutes eda-eda-worker-2 quay.io/ansible/eda-server:main "aap-eda-manage rqwo…" eda-worker 2 hours ago Up 3 minutes eda-podman-1 quay.io/containers/podman:v4.5 "podman system servi…" podman 2 hours ago Up 3 minutes 0.0.0.0:8888->8888/tcp eda-postgres-1 docker.io/library/postgres:13 "docker-entrypoint.s…" postgres 2 hours ago Up 3 minutes (healthy) 0.0.0.0:5432->5432/tcp eda-redis-1 docker.io/library/redis:7 "docker-entrypoint.s…" redis 2 hours ago Up 3 minutes (healthy) 0.0.0.0:6379->6379/tcp
ログイン
ブラウザで http://localhost:8080
を開きます。(up
のログに :8000
が出てますが、画面は :8080
のようです。)
初期の管理者ユーザーは、up
したときのログにも表示されますが、ユーザー名 admin
パスワード testpass
です。このユーザー情報でログインします。
ログイン後トップは以下のような画面でした。ブラウザの言語設定に合わせて日本語表示になりました。
日本語表示だと、ドキュメントの突き合わせが難しくなることもありそうなので、ブラウザの言語設定を英語にしました。
探索
各メニューをクリックして探索してみます。
Rule Audit
まだ何も表示されません。おそらく、実行ログ的なものが表示されるのだと思います。AWX や Automation Controller でいうジョブでしょうか。
Rulebook Activations
Rulebook Activations を作成したり、作成済みの一覧が表示されたりする画面のようです。
説明として
Rulebook activations are rulebooks that have been activated to run.
とあります。Rulebook activationは、Rulebook (条件やアクションを定義したファイル)実行可能状態にすること(したもの)のようです。
Create rulebook activation
ボタンをクリックすると以下のような作成画面になりました。
各入力項目はおそらく以下のようなことだと思います。
- Project: Rulebook があるジェクト(≒リポジトリ。Resources > Project で予め作成)
- Rulebook: Rulebook のファイル名
- Decision environment: Rulebook を実行するためのコンテナイメージ定義(日本語では
決定環境
。Resources > Decision Environments で予め作成)
Projects
Project の作成画面は以下のとおりです。AWX や Automation Controller の Project と似てますね。
Credentials
Credential の作成画面は以下のとおりです。
Credential type
では以下の3つが選択できました。Project や 後述の Decision Environment に紐づけて使用するということでしょう。
Decision Environments
Decision Environment の作成画面は以下のとおりです。
AWX や Automation Controller における、Execution Environment が Ansible を実行する環境であるのに対して、Decision Environment は Rulebook を実行するために ansible-rulebook
が入った環境ということだと思います。
User
User 一覧画面は以下の通り。今回のデプロイ方法では デフォルト admin
のみでした。
ユーザーごとに Controller Token を紐づけできるようです。このトークンを使って、デプロイ時に環境変数で指定した AWX や Automation Controller と連携(ジョブテンプレート実行など)できるということでしょうか。結構大事な設定そうですが、今回は未検証です。
Role
Role 一覧画面は以下の通りです。
おわりに
eda-server(EDA-Controller)をデプロイして簡単に画面を探索してみました。少し新しい用語が出てきてますが、 AWX や Automation Controller の用語に近いものもあります。
動作の方は全然検証できていないので、今後やってみたいと思います。
おそらくその前に AAP 2.4 がリリースされて、ドキュメントも公開されると思うので、ドキュメントを読みたいところです。