みなさんメリークリスマス! Red Hatのさいとう(@saito_hideki)です。
この記事は、Ansible Advent Calendar/Red Hat Advent Calendarの2023年最終日の記事です。
ここ数年、Ansible Advent Calendar/Red Hat Adivent Calendarでは、最終日に翌年のAnsibleプロジェクトに関連する動向を予想したお話を書いてきました。今回は、Event Driven Ansibleのダッシュボードを含めたコントロールプレーンを提供するためのアップストリームプロジェクトである EDA Serverを取り上げてます。
具体的には、2024年のEDA Serverを体験するために、現在の開発版のインストールと起動方法についてご紹介しようと思います。今年も文字多めです。
2023年に公開された新技術
2023年のトピックは、@akira6592さんが、Ansible Advent Calendar 2023 12月24日の記事([Ansible] 2023年の Ansible 関連リリースや動向まとめ)としてまとめてくれています(感謝!)
そこで言及されている通り、2023年には新たに以下の2つのプロダクトがリリースされました。
- Event-Driven-Ansible -> 以降EDA
- Ansible Lightspeed -> 以降 Lightspeed
これらについては、ダウンストリームのRed Hat Ansible Automation Platform 2.4の新機能として、Ansible Automation Platform 2.4 注目の新機能紹介でまとめられていますので、興味のある方はご一読ください。
EDAとLightspeedは、これまでにない新しい試みでした。2024年は、これらのプロジェクトの機能追加とバグフィックスを中心として「改修と改善」がメイントピックになりそうで、現時点での予想として来年はびっくりするような飛び道具は、おそらくなしです。
EDA Serverの2024年を覗く
今回の開発環境は以下のスペックのFedora39のVirtualMachineです。
OS: Fedora39(x86_64) CPU: 2 Memory: 4096 HDD: 20GB
以降の手順は、基本的には公式ドキュメントDevelopment environment setupに従ってFedora39にEDA Serverをインストールすることを想定して書いています。poetry.logでガッチリとPythonライブラリのバージョンが固定されているので、開発環境のディストリビューションやバージョンを外すとちょっと厄介です。注意しましょう。
EDA Serverのビルドに必要となるパッケージ群をインストールします。今回は、プラットフォームにFedora39を利用し、コンテナエンジンとしてPodmanを利用します。
$ sudo dnf install libffi-devel libxml2-devel xmlsec1-devel xmlsec1-openssl-devel libtool-ltdl-devel openldap-devel python3.11 python3.11-devel podman
podman.socketサービスをrootlessで起動します。サービスのステータスとAPIアクセスを念のため確認しておきましょう。
$ systemctl --user enable --now podman.socket Created symlink /home/hsaito/.config/systemd/user/sockets.target.wants/podman.socket → /usr/lib/systemd/user/podman.socket. $ systemctl --user status podman.socket ● podman.socket - Podman API Socket Loaded: loaded (/usr/lib/systemd/user/podman.socket; enabled; preset: disabled) Active: active (listening) since Sun 2023-12-24 21:45:10 JST; 22s ago Triggers: ● podman.service Docs: man:podman-system-service(1) Listen: /run/user/1000/podman/podman.sock (Stream) CGroup: /user.slice/user-1000.slice/user@1000.service/app.slice/podman.socket $ curl -s --unix-socket /run/user/1000/podman/podman.sock http://d/v3.0.0/libpod/info | jq .version { "APIVersion": "4.8.1", "Version": "4.8.1", "GoVersion": "go1.21.4", "GitCommit": "", "BuiltTime": "Tue Dec 5 21:00:50 2023", "Built": 1701777650, "OsArch": "linux/amd64", "Os": "linux" }
docker-composeをインストールします。Ansibleのさまざまなプロジェクト(Ansible Core/AWX/Galaxy NG/EDA Server等々)の開発環境の構築手法は、プロジェクト毎にバラバラでまったく統一されていませんが、「コンテナをビルドしてdocker-composeでサービスとして起動する」という方法が主流です。
$ mkdir ~/.local/bin $ curl -L https://github.com/docker/compose/releases/download/v2.23.3/docker-compose-linux-x86_64 > ~/.local/bin/docker-compose $ chmod +x ~/.local/bin/docker $ docker-compose --version Docker Compose version v2.23.3
EDA Serverの開発環境用にvirtualenvを作成します。Fedora39のデフォルトPythonインタプリタは3.12ですが、EDA Serverの開発環境は、現時点(2023年12月25日)では、Python3.9から3.11までを想定しているため、ここでは事前にインストールしておいたPython.3.11を利用しています。
$ python3.11 -m venv ~/work/venv $ source ~/work/venv/bin/activate (venv) pip install -U pip
EDA Serverは、Djangoのアプリケーションです。起動に必要とするPythonライブラリ群はpoetryとre-commitを利用してインストールします。そのまえに、これらのツールをpipでインストールしておきましょう。
(venv)$ pip install pre-commit (venv)$ pip install poetry
docker-composeや、EDA Serverの管理コマンドのラッパーとして振る舞ってくれるTaskfile(taskコマンド)をインストールします。taskコマンドがラップしてくれる機能はこちらから確認できます。
Taskfileやpoetryは、他のプロジェクトの開発環境構築では、これまで使われてこなかった仕組みなので、ちょっと新鮮です。
(venv)$ sh -c "$(curl --location https://taskfile.dev/install.sh)" -- -d -b ~/.local/bin (venv)$ task --version Task version: v3.33.1 (h1:JJSRANHH7RQrr5Z2CTvSnTH7iWlfBlKV2W2O0JiZoLk=)
ソースコードをチェックアウトし、taskコマンドでビルドに必要となるモジュール群をインストールします。
(venv)$ git clone https://github.com/ansible/eda-server.git/ (venv)$ cd eda-server (venv)$ task dev:init task: [dev:init] poetry install -E dev Installing dependencies from lock file Package operations: 109 installs, 11 updates, 0 removals • Downgrading certifi (2023.11.17 -> 2023.7.22): Pending... • Downgrading cffi (1.16.0 -> 1.15.1): Pending... • Downgrading charset-normalizer (3.3.2 -> 3.1.0): Pending... • Downgrading idna (3.6 -> 3.4): Pending... • Installing pyasn1 (0.5.0): Pending... • Downgrading urllib3 (2.1.0 -> 1.26.15): Pending... [...] Installing the current project: aap-eda (0.1.0) task: [dev:init] pre-commit install pre-commit installed at .git/hooks/pre-commit
続いて、taskコマンドからdockerコンテナをビルドします。ここではdocker-composeを利用するので、環境変数DOCKER_HOSTに、podman.serviceのsocketファイルを指定してから実行します。DOCKER_HOSTの設定は、必要に応じて.bashrcなどのrcファイルに追加しておいてください。
(venv)$ podman info -f '{{.Host.RemoteSocket.Path}}' /run/user/1000/podman/podman.sock (venv)$ export DOCKER_HOST="unix://`podman info -f '{{.Host.RemoteSocket.Path}}'`" (venv)$ echo $DOCKER_HOST DOCKER_HOST=unix:///run/user/1000/podman/podman.sock (venv)$ docker-compose ls NAME STATUS CONFIG FILES (venv)$ task docker:build task: [docker] docker-compose -p eda -f tools/docker/docker-compose-dev.yaml build [+] Building 5.1s (0/1) docker-container:default => [eda-api internal] booting buildkit 5.1s => => pulling image moby/buildkit:buildx-stable-1 5.1s [...] => => exporting layers 14.3s => => exporting manifest sha256:4051e5517b307516aa49095b0b1aa70647fa0395ca993e15b4a36bafdff52d78 0.1s => => exporting config sha256:c91c61d366dc2b91c0b0e6aa7d9814c0e9ac37e53ae7d242c1fbf5aaa7c1d863 0.1s => => sending tarball 14.1s => [eda-api] importing to docker (venv)$ podman images REPOSITORY TAG IMAGE ID CREATED SIZE localhost/aap-eda latest c91c61d366dc 2 minutes ago 1 GB docker.io/moby/buildkit buildx-stable-1 be698b50dea4 3 weeks ago 173 MB
環境変数EDA_CONTROLLERにAutomation controllerやAWXのURLを指定し、taskコマンドでEDA Serverを起動します。task docker:up
はdocker-compose up -d
を実行します
(venv)$ export EDA_CONTROLLER_URL=https://<IPADDRESS> (venv)$ task docker:up [...] [+] Running 14/14 ✔ Network eda_default Created 0.0s ✔ Volume "eda_podman_data" Created 0.1s ✔ Volume "eda_postgres_data" Created 0.1s ✔ Container eda-redis-1 Healthy 1.0s ✔ Container eda-podman-pre-setup-1 Started 1.0s ✔ Container eda-postgres-1 Healthy 1.5s ✔ Container eda-podman-1 Started 0.6s ✔ Container eda-eda-scheduler-1 Started 0.7s ✔ Container eda-eda-api-1 Healthy 0.4s ✔ Container eda-eda-activation-worker-2 Started 0.4s ✔ Container eda-eda-ui-1 Started 0.8s ✔ Container eda-eda-ws-1 Started 0.8s ✔ Container eda-eda-default-worker-1 Started 0.7s ✔ Container eda-eda-activation-worker-1 Started 0.4s
最後に、taskコマンドから管理ユーザアカウント(admin)のパスワードを設定しましょう。実際にはaap-eda-manage changepassword
を実行しています。
(venv)$ $ task manage -- changepassword admin Changing password for user 'admin' Password: changeme2024 Password (again): changeme2024 Password changed successfully for user 'admin'
EDA Serverのフロントエンドは、Port:8443でListenします。firewalldでPort:8443を許可しておきましょう。
(venv)$ sudo firewall-cmd --zone=public --permanent --add-port=8443/tcp success (venv)$ sudo firewall-cmd --reload success
ダッシュボードにアクセスし、adminアカウントでログインしてみましょう。/eda/
を忘れずに。
https://EDA_SERVER_URL:8443/eda/
ログイン画面が表示され、これでeda-serverリポジトリのmainブランチからビルドしたEDA Serverにログインできます。
起動したコンテナの確認
taskコマンドで起動したコンテナには、ビルド元になったソースコードのパスがマウントされています。必要に応じて自身でソースコードを改変し、taskコマンドでdown->upすれば、改修内容もチェックできますね。
(venv)$ podman inspect eda-eda-api-1 [...] "Mounts": [ { "Type": "bind", "Source": "/home/hsaito/work/eda-server", "Destination": "/app/src", "Driver": "", "Mode": "", "Options": [ "rbind" ], "RW": true, "Propagation": "rprivate" } ], [...]
サービスの停止と起動方法は以下の通りです。
(venv)$ task docker:down (venv)$ task docker:up
まとめ
この記事では、EDA Serverをmainブランチからビルドすることで、コントロールプレーンの最新のダッシュボードを含めた機能を体験する方法をご紹介しました。2024年は「改修と改善」の年になるでしょう。個人的には2023年は何だか忙しく、アップストリームに貢献することがほとんできない年でした。今回の記事に書いた開発版の構築手法を活用しながら、2024年はもう少しアップストリームに貢献したいなと考えてます。みなさんも是非 ;)
それではみなさん、2024年もHappy Automation!