本記事はAnsible Advent Calendar 2025 21日目の記事です。
えっ、ansible-navigatorってなんすか?ansible-playbookじゃないんすか
2025年10月、私は転職して自動化エンジニアチームに配属された。Ansibleに特化した部隊だ。大丈夫、Ansibleなら前職でも使ってきたし、自宅ラボもAnsibleで管理してきた。念の為、有休消化中はAnsibleの入門書を熟読した。最初の方の章だけだが。とにかく、Ansibleの使い方なら分かってる。もっぱら私が打つコマンドはこんな感じだ。
export ANSIBLECONFIG=${PWD}/ansible.cfg; /Users/ija/Library/Python/3.9/bin/ansible-playbook -v -i inventorys/ -l lxc-prometheus sites/site.yml
まあ多少恥じるところはある。venvとか最近だとuvとやらを使うべきなのかなとか、3.9は古すぎるかなとか。だから、正しいansible-playbookコマンドを覚えようと思っていた。
そしていよいよ配属され、最初に私が呆けて発した質問がタイトルの通り、以下である。
「えっ、ansible-navigatorってなんすか?ansible-playbookじゃないんすか」
呆けた私に、配属先の先輩はこう説明した。
「今のAnsibleの環境はコンテナなんだ。だからvenvはいらないし、コンテナ上でAnsibleを動かすために、ansible-playbookじゃなくてansible-navigatorを使うよ。あ、ちなみにコンテナってDockerじゃなくてPodmanね。Ansible Builderを使ってExecution Environmentsのイメージを作成してansible-navigatorコマンドで実行するよ。あと、Ansible TowerじゃなくてAnsible Automation Platformを使うよ」。
Ansibleはいつの間にか知らない何かになっていた。
いつからAnsibleはansible-playbookではなくなってansible-navigatorになったのか。Podmanとは何なのか。なぜDockerじゃないのか。Execution Environmentsとは何なのか。
ちなみにAnsible Towerは多分昔参加したハンズオンでしか使ったことがないので、Ansible TowerがAnsible Automation Platformに変わっていることへの衝撃はあまり感じなかった。そもそも何ですかそれは。私が知っているのはSemaphore UIだけなんです。
いつからAnsibleはansible-playbookではなくなってansible-navigatorになったのか。というか、そもそもansible-navigatorってなに
▽ 2021年12月 「赤帽エンジニアブログ」にてansible-navigatorが紹介される
ansible-navigatorのGitHubリポジトリが初めてリリースを出したのは2021年5月 v0.6.1でした。当時のAnsibleコミュニティの温度感を知る術として、赤帽エンジニアブログさんが2021年に投稿された、「2022年のAnsibleとわたし」という記事が大変参考になったのでご紹介します。
このような、実行環境の差異を解決するために、これまでいくつかのアプローチが存在していました。
- 実行環境を構築するための手順書による手動構築する
- 1.の構築自体を自動化するためのブートストラップ的なPlaybookの作成と実行する
- 実行環境をPythonのvirtualenvで作成後にrpmなどでパッケージ化し、コントロールノードにインストールして利用する
水平展開しやすいのは、疑いなく3.ですが、パッケージの適用後にコントロールノードの管理者権限を持つ利用者によって改変されてしまう可能性は残ります。そこで、3.のパッケージ化のアプローチをもう一歩進めてコンテナ化してしまえば良いのではないか...というアイデアが数年前から議論されていました。
(「赤帽エンジニアブログ - 2022年のAnsibleとわたし」 より引用)
引用元:
AnsibleはPythonで構成されていることから、実行環境を整えることに苦労していたという話題です。確かに、私もansible-playbookを使う際にはPythonのバージョンや、ansible-coreのバージョンに注意していました。
というか、基本的にアップデートは行わず、固定のバージョンで開発を行っていました。
環境を展開したい場合、このようなバージョン依存の曖昧な制約が厄介であることは容易に想像がつきます。なのでコンテナ化の思想に辿り着いたのも納得がいく話な気がします。
しかし、Dockerが誕生したのが2013年であることを考えると、なんとなくコンテナ化の話はもっと早くにあったんじゃないか?という気がしました。ansible-navigatorが使用するPodmanがリリースされたのは2018年なので、Podmanを基準に考えるとansible-navigatorの登場まで4年弱でしょうか。その間、Ansibleコミュニティではどのような議論があったのか、コンテナの登場とAnsibleのコンテナ化までの空白期間に何が起きていたのかが気になりました。
▽ 2020年10月12日 ansible-runnerとansible-builderの発表に伴い、Execution Environmentsの構想が発表される
2020年10月12日、Ansibleのメーリングリストにて、Adam Miller氏より「RFC: Execution Environments for Ansible Automation」という投稿がなされました。
RFC: Execution Environments for Ansible Automation:
この投稿は、ansible-builderがコンテナイメージとしてExecution Environmentsを作成し、ansible-runnerがコンテナイメージとして作成されたExecution Environmentを実行することで実行環境を統一化するという発表でした。
Redditに、この投稿への反応が残っていました。
要約すると、以下のような意見が書かれていました。
- コンテナ起動によってオーバーヘッドが増加することへの懸念
- Ansible Towerでコンテナを使用するなら分かるが、CLI(特にローカルでansible-playbookを使ってきた)ユーザにとって、毎回コンテナを起動するのは複雑すぎるのでは、という反発
- Ansibleのインストールの複雑さに対する問題をMakefileやrequirements.txtからDockerfileに移しただけでは?という指摘
Redditのコメントは辛口なものが多いですが、当時のユーザの率直な温度感を知る資料としては非常に参考になります。
このスレッドを見る限り、「コンテナ化」という発想は当時のユーザから全面的に肯定されたわけではなく、特にオーバーヘッドの増加や構成の複雑化を懸念する声が少なからず存在していたことが伺えます。
このプロジェクトは、従来ansible-playbookが担っていた実行処理をAPI的に扱い、実行環境コンテナ(Execution Environments)内で利用することを試みるものでしたが、
まもなくansible-builderはAAPに取り込まれる形で実運用に活用されていきました。
そして、こうしたExecution Environmentsの思想をCLIから扱うためのインターフェースとして、ansible-navigatorが設計・開発されていくことになります。
▽ 2021年6月 ansible-navigator 1.0.0a1 がPyPIで公開
2021年6月1日、PyPIにansible-navigatorのアルファ版がリリースされました。
また、翌日にはansible-navigatorの開発者の一人であるcidrblock氏がRedditにリリースの告知を投稿しました。
PyPIのdescriptionには、「A text-based user interface (TUI) for the Red Hat Ansible Automation Platform」と記載されていました。この記述から、ansible-navigatorは当初からExecution Environmentsそのものを提供するツールというよりも、Ansible Automation Platformを前提とした実行環境を扱うためのインターフェースとして位置付けられていたことが分かります。
ansible-navigatorの振る舞いに困惑するユーザに、cidrblock氏はこのように回答しています。
Today, the primary use-case for ansible-navigator is to vet and test an execution environment (container) locally before using it in production with AWX/controller.
日本語訳:現在、ansible-navigator の主な使用例は、AWX/controller を使用して本番環境で使用する前に、実行環境 (コンテナ) をローカルで検査およびテストすることです。
引用元:
つまり、ansible-navigatorは当初からAWX/controllerを前提とした文脈で設計されていたようです。また、当時のAWX/controllerは既にコンテナを利用していたことが伺えました。
これらを踏まえると、ansible-navigatorの主目的はTUIを提供し、AWX/controllerが行っていたExecution Environments(実行環境)の起動を、ローカルで検証的に実行することにあったと考えられます。
▽ 2021年10月 Red Hat社が「What's new in Ansible Automation Platform 2: automation content navigator」を投稿
Red Hat社がansible-navigatorをansible-playbookに置き換わる存在として宣言した象徴的な記事が、2021年10月に投稿された「What's new in Ansible Automation Platform 2: automation content navigator」です。
以下は、上述のブログからの引用です。
Considering the shift towards containerized execution of automation, the automation development workflow and pre-existing tooling must be reimagined. In short, ansible-navigator replaces ansible-playbook and other ansible-*` command line utilities.
日本語訳:自動化のコンテナ化実行への移行を考慮すると、自動化開発ワークフローと既存のツールを再考する必要があります。つまり、ansible-navigatorはansible-playbookやその他のansible- * `コマンドラインユーティリティに代わるものです。
こうして、AAP2のリリースによって、AAPにおいてのansible-navigatorはansible-playbookに置き換わるものとして位置付けられました。
え、ansible-navigatorってなんすか?
今回の調査で、ansible-playbookコマンドがansible-navigatorに完全に置き換わったわけではなく、コンテナ化を軸としてAAPの文脈においてansible-navigatorが台頭したことが分かりました。
ansible-navigatorとは、Ansibleのインストールの複雑さをコンテナによって解消しようとして生まれた「Execution Environments」の思想、それを取り込んだAAPをTUIでフォローするために生まれたユーザインターフェースツールであり、ナビゲーターとしてAnsibleのコンテナ化を支える象徴的存在なのでした。
ansible-playbookじゃないんすか
ansible-playbookコマンドはAnsibleから独立したCLIツールというわけではなく、ansible-coreとして内蔵されています。そのため、ansible-playbookコマンドは常に最新のAnsibleで利用可能です。
また、コンテナエンジンを使用しないメリットとして、コンテナイメージの容量を気にしなくて良い、オーバーヘッドの増加を気にしなくて良い、コンテナの学習コストをかけずにAnsibleを使用できるなどが挙げられ、今後もansible-playbookを使う場面はありそうです。
参考一覧:
-
Adam Miller,“RFC: Execution Environments for Ansible Automation”,Ansible-devel メーリングリスト(2020-10-12)https://groups.google.com/g/ansible-devel/c/EPhHPTUTEDQ
-
Reddit / r/ansible, “RFC: Execution Environments for Ansible Automation” https://www.reddit.com/r/ansible/comments/jb65sd/rfc_execution_environments_for_ansible_automation/
-
Reddit / r/ansible,“ansible-navigator 1.0.0a1 just released” https://www.reddit.com/r/ansible/comments/npznxl/ansiblenavigator_100a_just_released/
-
cidrblock(ansible-navigator 開発者),Reddit コメント: ansible-navigator の主なユースケースについて https://www.reddit.com/r/ansible/comments/npznxl/comment/i3tcowu/
-
PyPI, ansible-navigator 1.0.0a1 https://pypi.org/project/ansible-navigator/1.0.0a1/
-
赤帽エンジニアブログ,「2022年のAnsibleとわたし」(2021)https://rheb.hatenablog.com/entry/ansible_future_2022
-
Red Hat Blog, “What’s new in Ansible Automation Platform 2: automation content navigator” https://www.redhat.com/en/blog/whats-new-in-ansible-automation-platform-2-automation-content-navigator