てくなべ

ansible / network automation / 学習メモ / 思考メモ

[Ansible/AAP] 次のバージョンの AAP の情報をリリース前に知る方法

はじめに

Red Hat Ansible Automation Platform (AAP) は、アップグレードのたびに機能追加や古い機能の削除などが行われます。内容は基本的に AAP の公式ドキュメント から該当のバージョンを選択して、「Release notes」などで確認できます。

特に、AAP on AWS のようなマネージド型の場合は、利用者側がアップグレード作業をしなくていい代わりに、決められたアップグレードのタイミング(AAP 2.7の場合のKB)までに事前にアップグレードの変更点は知っておきたいものです。

この記事では、利用者として閲覧できる範囲でなるべく早く次のバージョンの情報を知る方法をまとめます。

補足:

  • 本記事のここでアップグレードとはAAP 2.5 から 2.6 のような単位のことを指します
  • 本記事では「AAP 2.7 の~」といった記述がありますが、本記事執筆時(2026/5/18)では未リリースです。そのためいずれもリリース前の情報です

1. 製品ドキュメントページで「2.next」を選択

最近知ったので最初に紹介します。

「はじめに」で AAP の公式ドキュメント から「該当のバージョンを選択して」と書きましたが、最近「2.next」を選択できることを知りました。

2.next の選択

現状、選択してみるとドキュメント一覧に「Ansible Automation Platform preview release notes」があります。ここに、まだドキュメントのバージョンを明示的に選択できない AAP 2.7 の情報があります。

docs.redhat.com

例えば以下のような内容があります。

なお、2.next の選択肢については、後述の AAP 2.7 のスケジュールに関するKB のコメント欄で知りました。

2. ドキュメント管理リポジトリを見る

AAP のドキュメントの元ネタになっているリポジトリは ansible/aap-docs です。なので、こちらのプルリクをチェックしていると、新しいバージョン含めて更新の動向がうかがえる時があります。

github.com

確認したい AAP のバージョンに合わせて、リポジトリのブランチを選択します。AAP 2.6 であれば 2.6 です。プルリクを眺めている感じですと、プルリクはまず main に対して出されて、そのあと各バージョンのブランチに反映させるためのプルリクが「[2.x backport]~」という形で出されるようです。

ここ最近の状況を眺めていると、バージョンごとのブランチは、リリースの前に新しく作成されてきました。現状 2.7 ブランチがないですが、もうじき作成されるのではないかと思います。

Markdown ではなく AsciiDoc の書式で書かれていて、変数的なものも埋め込まれています。変数的なものはビルドするタイミングで実際の値に書き換わります。ビルド前の生の AsciiDoc のファイル(*.adoc)を見るにはやや慣れが必要かもですが、変数名でだいたい連想できるようになっています。

また、ドキュメントも生き物のようであり、修正頻度がやや多いタイミングもある点は注意が必要です。

3. Red Hat の KB

Red Hat Customer Portal で「AAP 2.7」のようなキーワードで KB を検索すると、リリース前でも次のバージョンの AAP の情報がヒットすることがあります。

access.redhat.com

直近では、マネージド版の AAP 2.7 へのアップグレードのスケジュールに関するKBがとても有用でした。

4. YouTube

Ansible の公式 YouTube チャンネル

直近では、AAP 2.7 の新機能紹介動画がアップされています。

www.youtube.com

他、個人としては @alexdworjan さんの YouTubeでは、新しい機能が紹介されることがあります。

たとえば、 Execution Environment Builder という新しい機能(ansible-builderとは別物)が紹介されていました。

www.youtube.com

5. Red Hat のイベント

年次のグローバルイベントである Red Hat Summit で、新バージョンのAAPの機能について触れられることがあります。先日開催された Red Hat Summit 2026 でも Day 2 キーノートで Automation orchestrator についての発表がありました。

tekunabe.hatenablog.jp

おわりに

新しいバージョンの AAP の情報を早めに知る方法をまとめました。改めて見てみると、文字も動画も結構いろんな方法があってありがたいです。

Red Hat Summit 2026 のキーノートで気になったキーワード(主に自動化方面)

はじめに

2026/05/11-14 (現地時間)、アトランタで Red Hat Summit 2026 が開催されています。例年通りキーノートは YouTube Live で視聴できました。新しいプロダクトや構想の他にも、日産自動車から日本の方が登壇されていたのが印象的でした(参考リンク)。

本記事では、各キーノートから個人的に気になったキーワードを主に自動化方面にフォーカスしてまとめます。

その他、公式情報は Red Hat Summit 関連のプレスリリースまとめ などを追うのがよさそうです。

RHEL 系のアップデートについては、赤帽エンジニアブログの方で詳しくまとまっていて参考になります。

rheb.hatenablog.com

キーノート動画

Day1

www.youtube.com

Day2

www.youtube.com

翻訳字幕付きの動画は https://tv.redhat.com/ で後日(確か 2026/05/22までに)公開されるそうです。

Automation orchestrator

www.redhat.com

これまでの AAP でも、ワークフロージョブテンプレートという形で、「アレしたらコレやって、次に・・」のような、タスクを連ねる形のワークフローを作成できていました。

昨今では、Event-Driven Ansibleや AI 駆動など、自動化を取り巻くプロダクトや概念が増えてきています。おそらく、これらを束ねるものとして Automation orchestrator が登場する、ということのようです。

あまり情報は出ていませんが、以下の画面キャプチャーである程度イメージができます。

インシデント修復ワークフローの例(https://www.redhat.com/en/technologies/management/ansible/automation-orchestrator より引用)

ぱっと見では AAP のワークフロービジュアライザーのように見えます。が、よく見ると、EDA(Event-Driven Ansible)をトリガーにして、AI による調査、人による承認操作、修復タスクなどが含まれています。ワークフロービジュアライザーよりも広い範囲がカバーされているのが見て取れます。

たまたま AAP 2.7 の情報を追っていた時に、Automation orchestrator の存在を知ったのですが、Day2キーノートでも触れられている(14:31頃)ということは目玉の一つという印象でした。

提供形態は「As an add-on capability to an Ansible Automation Platform subscription」という表現がされています。おそらくは画面もインストーラーも別になるのではないかと思います。

リリース時期は technology preview として、2026年3Q または2026年中のようです。(参考記事1参考記事2

他に気になったキーワード

自動化方面以外で気になったキーワードです。前提知識と英語力のなさから、箇条書き+リンク集レベルですが・・・

※前述の赤帽エンジニアブログの記事が参考になります。

おわりに

簡単ですが、Red Hat Summit 2026 のキーノートで気になったキーワードを主に自動化方面にしぼってまとめました。

これまで自動化という切り口にで AAP に注目をしていましたが、 Automation orchestrator が出てくることによって「自動化」が示す範囲が広がるなという印象でした。

余談

去年までは AnsibleFest と同時開催という扱いで、去年時点の来年(2026年)の予告でも「Red Hat Summit and AnsibleFest 2026」という表記でしたが、2026年では「AnsibleFest 2026」という表記は見当たりませんでした。見逃していたらすみません!

タスクの変数を減らす

はじめに

(タイトルがAnsibleの話みたいになってますが別の話です)

先日の記事「自動化の難易度は機能とパラメーターのセットで考える - てくなべ」で、自動化とパラメーターは切っても切り離せない旨を書きました。

このことは「パラメーターが少ない方が自動化しやすいこともある」という側面もあります。

特に目新しい話ではありませんが、最近身近なところで実感した経験がありました。

今から一時間後にアラームを鳴らしたい

毎日行っている1 時間の作業があります。作業の終わりに気付くために、作業開始時に「今から一時間後にアラーム鳴らす設定をする」ということをやっていました。

開始時刻は毎日微妙にぶれていました。そのため「今から~」の「今」の時刻が毎回異なります。

いちいち手動で設定するのは面倒なので、スマホで Gemini「今から1時間後にアラーム」と話しかけて都度設定していました。

だんだんそれさえ面倒に

しばらく、都度 Gemini に声で依頼という運用をしていました。しかし、だんだんとそれさえも面倒になってきてしまいました。もっと効率よく「今から一時間後にアラーム」を設定できないか、と考えました。

が、なかなか妙案は思い浮かびません。もやもやを抱えながらも、ずるずると同じ方法で続けていました。

寝言で「今から一時間後にアラーム」を言ってないか心配です。

前提を変え、設定作業そのものをなくす

ふとある時、「今」が毎回ぶれているからその都度設定する必要があるんだと気が付きました。 そこで、開始時刻を毎日一定にして、その時刻から一時間後に日次アラームを設定しておくことにしました。この設定作業自体は一度キリです。

すると、当たり前ですが毎日設定しなおす手間がなくなりました。

「開始時刻から1時間後の終了時刻」という毎回可変のパラメーターをなくすことで、効率化というか、そもそも毎回のアラーム設定の必要性がなくなりました。

気が付くのが遅かったのですが「これでよかったんだ」と思いました。

おわりに

いわゆる「運用でカバー」のような構図に見えるかもしれませんし、実際そうかもしれません。

ですが、作業を減らす方向に運用の前提を変えると結構よかった、という実体験になりました。

レビュー要・不要の議論の前にレビューの目的を揃えたい

昨今、生成AI によるコードレビューの自動化が発達して「人間のレビューは必要か?不要か?」という論をよく見かけます。

私は流されやすいところももあり、必要論も不要論も「それもそうだな」と、ある種の早合点してしまう傾向があります。

必要か不要かを考える前に。そもそものレビューの目的を捉えなおさないと、軸がなくて判断がぶれてしまうなと思いました。

昔の話ですが、

レビューは、他人のコードを自分のコードにする工程だ

と言われた遠い記憶があります。一言で表すなら、共同所有のため、でしょうか。

品質の観点とはまた別モノです。

もしかしたら、この論を持ち込むのはナンセンスなのかもしれませんし、その役割を人のレビューに求めるのも違うのかもしれません。

ですが、レビューの目的の認識をそろえること自体は今も必要なのかなと思いました。

ファイアウォールのポリシーの設定変更の難しさとその自動化の難しさを考える

はじめに

ネットワークの運用作業で、ファイアウォールのポリシーや ACL の設定追加、変更、削除(以降、ポリシー設定)はよくあるのではないでしょうか。そして、なかなか大変なこと(詳細は後述)も多いです。この大変さを解消する手段の候補として自動化が挙げられます。

ただ、以前の記事「自動化の難易度は機能とパラメーターのセットで考える」でも少し触れたのですが、自動化するのがとても難しい作業だと思っています。

この難しさは、大きく以下の2つに分かれると捉えています。

  1. そもそもの作業の難しさ
  2. それをさらに自動化しようとしたときの難しさ

仮に自動化したとしても、解決したかった課題がおいてけぼりにされて残ったままだと、徒労に終わってしまうかもしれません。

この手の作業ってどんなことが課題になりがちなんだっけ、と自分が立ち止まって考えるために、ポリシー設定作業そのものの難しさと、それを自動化しようとしたときの難しさについてまとめます。

なお、本記事で何か特別な良い方法を示すのではなく、主観的な難しさや大変さを述べるのみですのでご了承ください。

本記事で挙げる難しさを解消する手法やプロダクトがすでにあるかもしれませんが、そのような特別な仕組みがないベーシックな環境を想定しています。

いきなりまとめ

ちょっと長い記事なので先に簡単にまとめます。

  • ポリシー設定作業はそもそも難しい。特に要件から設定を導き出すのが難しい
  • 難しいことを自動化するのは難しい。さらに、手動の効率化の延長に自動化がないこともある

1. 要件から設定を導き出す難しさ

通信要件をもとにして、どの機器にどのような設定を入れればいいか導き出すことの難しさについてです。

これが一番難しいかもしれません。

1.1. そもそもの難しさ

運用体制にもよりますが、どこからか「この通信を通してください」という依頼が来て、それを受けて作業に取り掛かる体制を想定します。

依頼内容は例えば以下のようなものです。

  • 送信元IPアドレス
  • 宛先IPアドレス
  • 宛先ポート番号
  • アクション: 許可/拒否

依頼元はエンドツーエンドの通信要件のみに関心があり、その間にどのようなネットワーク機器があって、どういう設定になっているかは気にしません(というケースを想定)。このこと自体は良しあしではなく、体制上の特性です。

関心の違い(一例)

この場合、依頼を受けた側は実際のどの機器にどういう設定をすればいいか導き出す必要があります。頭の中は以下のような感じです。

  • 「ここからここへの通信だから、FW101とFW801のポリシー、それからL3機器の RT101とRT102のACLが関係しそうだ」
  • 「あれ、、そもそもルーティング的には通ってるかな。どれどれ・・。あぁ大丈夫か」
  • 「それぞれの現状のポリシーをドキュメントで確認しよう」
  • 「FW101とFW801に追加が必要だな。既存のアドレスオブジェクトやサービスオブジェクトで賄えるかな・・?」
  • 「サービスオブジェクトは既にあるな。アドレスオブジェクトだけ作成が必要だ。つまり設定はこんな感じだな」

こういった過程がなかなか大変です。机上でのチェックならなおさらです。レビューする人にとっても。

ちなみに、調べ上げた結果、依頼の通信要件がすでに満たされていることもあり得ます。

1.2. 自動化の難しさ

設定の導出を自動化するには、これまで人がどうやって導き出していたのかをロジック化する必要があります。

与えられたパラメーターを投入すること自体は自動化で担保できたとしても、そもそもパラメーターが誤っていたら「正しく間違える」のようなことになってしまいます。「Garbage In, Garbage Out」にも通じます。

2. 順番を考慮する難しさ

ポリシーの類は上から順に評価されますが、それを考慮することの難しさについてです。

2.1. そもそもの難しさ

ポリシー設定は、ネットワーク機器の設定としてはかなり順序性に気を遣う設定です。

極端な例では、「全ホスト許可」のルールの後に「特定ホストのみ許可」があっても隠れてしまって、意味がありません。隠れたほうのルールを「シャドウルール」と呼ぶこともあります。

機器側の機能としてシャドウルールを検出できる場合もあります。しかし、机上で脳内で判断するのはなかなか難しいものです。

他にも、禁止のポリシーの後に許可をしても意味がないというケースもあります。

ここまでは「そうしないと意図する挙動にならない」という事情でした。

一方で「新規ポリシーを2行目に追加しても3行目に追加してもどっちでもいい」というようなケースもあります。どっちでもいいので制約がなくて楽という反面、制約がないので迷いが生まれるという面もあります。これも何かしらのルールがあるのが理想ですね。

2.2. 自動化の難しさ

先に挙げた「シャドウルール」を避けるような、相応のロジックが必要になります。機器側にシャドウルールを検出してくれる機能があれば、それを自動化の処理の中で応用する方法はあるかもしれません。そうでない場合は、ネットワーク的な計算処理を自前で作成することになり、まるでネットワーク機器側の機能の一部を書くような難しさも垣間見えてきます。

「ある程度どこに追加してもいい」という場合も、人の気分ではなく何かしらのルール化、ロジック化が必要になります。

3. 設定の自由度からくる難しさ

何かと名前付けが必要なポリシー関連の設定の難しさについてです。

3.1. そもそもの難しさ

ポリシー関連の設定は名前付けの嵐です。

  • アドレスオブジェクト名、アドレスグループ名
  • サービス名、サービスグループ名
  • ポリシー名

個人的な感覚ですが、ネットワーク機器の設定として名前を自由に決められる項目は多くないように思います。description くらいでしょうか。ポリシー関連の設定になると自由度が増して、それと同時に「どうしよう・・」という迷いや「適当でもいいかな」という気持ちが芽生えやすい気もします。

あまり適当にしてしまうと、ポリシーの目的が分からずに後で消せなくなったりもします。

名前を自由に決められることは、便利な反面、命名規則などのルールがないと混乱のもとになり得ます。これがある種の難しさの一因かなとも思います。

3.2. 自動化の難しさ

すでに名前付けの難しさを挙げましたが、自動化するには名前付けをルール化する必要があります。

なんとなくで決めていた場合は、いよいよどうするかを決めることを迫られる場面です。

4. グループ化の難しさ

ちょっと細かい話になりますが、アドレスグループのようにオブジェクトをグループ化することは、時々悩ましいことを引き起こすことがあります。

4.1. そもそもの難しさ

たとえば、/32 のアドレスオブジェクトを束ねて、以下のアドレスグループが作成されていたとします。

  • アドレスグループ: WebServers
    • アドレス: 10.0.1.1/32
    • アドレス: 10.0.1.2/32
    • アドレス: 10.0.1.3/32

このようにグループ化しておくと、何かと管理しやすくなり、効率化にもつながりますね。

さらに、上記のアドレスグループが以下のようにポリシーに適用されているとします。

  • 送信元: any
  • 宛先: WebServers
  • サービス: HTTP
  • アクション: 許可

この状態から、以下の通信要件を「削除」する場合についてです。

  • 送信元: any
  • 宛先: 10.0.1.3/32
  • サービス: HTTP
  • アクション: 許可

10.0.1.3/32WebServers のメンバーです。ですが、安直に WebServers から 10.0.1.3/32 を削除すると、WebServers を指定している他のポリシーにも意図せず影響が出てしまいます。

他のポリシーに影響が出ないようにするには、グループ化の仕方を見直すなどの対応が必要になります。

4.2. 自動化の難しさ

影響がない削除の方法をロジック化するのはなかなか難しそうです。

極端かもしれませんが、宛先の指定がアドレスグループではなく 10.0.1.1/3210.0.1.2/3210.0.1.3/32 であれば、このポリシーの宛先から 10.0.1.3/32 を削除すればいいだけなのですが。

この件については「(グループ化のように)手動前提の効率化の延長に自動化があるとは限らない」という点に気付かされます。

5. 作業当日の確認の難しさ

ポリシー変更に限りませんが、作業当日の事後確認の難しさについてです。

5.1. そもそもの難しさ

難しいというよりは、不安という表現の方が適切かもしれません。

必要な設定が揃って手順も完璧!と思って迎える当日も、不安は残ります。そもそも要件から正しい設定を導き出せていたか、それを正しく設定できたかを確認する、事後確認があるためです。

事後確認が必要なこと自体は、ほかの多くの作業に共通することで、たとえばルーティング設定であればL3レベル疎通確認を行います。

ポリシー設定の場合はそれより上のレイヤーを含む確認が必要です。そのため、確認に必要なバリエーションが多かったり、再現が難しい場合もあったりします。この辺りが難しさの要因です。

もちろん、今回の設定に関係ない(はずの)通信に影響がないかも気がかりポイントです。

5.2. 自動化の難しさ

「この通信は通るはず or 通らないはず」というチェックを、エンドツーエンドのエンド側にいる人がやっていた場合、「そこにいる人」からの通信を再現する難しさがあります。

オフィスで利用するような Windows PC から疎通確認を行っていたのを自動化したい場合、ほかの自動化の仕組みとは異なる仕組みが必要かもしれません。例えば他は Python で、エンドだけ PowerShell など。

自動化のために確認方法自体を見直す必要がある場合もあるでしょう。

番外編: ドキュメントの維持の難しさ

これまであげたパラメーターや作業とは少し毛色が異なるので番外編として扱いますが、細かいドキュメントを正しく維持することの難しさについてです。

ドキュメントが正しくメンテナンスされていない場合は、現状のポリシーをドキュメントで確認することができません。この場合は、実機の設定を確認する必要があります。複数の機器の設定を確認するとなると、やはり相応の手間になります。

ドキュメントを正しくメンテナンスしていればいい話、というのはその通りです。ですが、リッチなドキュメントとして管理しようとすると、それだけメンテナンスの負荷も高くなります。

形式 読み手の負荷 メンテナンスの負荷
コンフィグだけ取っておく 高め 低め
ポリシーを表形式にする 低め 高め

表形式の場合、メンテナンスされているのであれば読み手も安心です。そうでなく設定ドリフトがあることが予見される場合、一気に緊張感が高まります。結局、実機を見たほうがいいという心理が働きます。

仮に動的ルーティングの設定であれば、ルーティング情報は機器同士でやりとりがされて、コンフィグに表れるのはルーティングプロトコル自体の設定です。

それに対して、ポリシーの設定の類は機器同士で情報をやり取りすることはなく(そういう高度な仕組みがある場合を除く)、機器ごとのコンフィグにポリシー設定(様々なオブジェクト、ポリシー)が表れます。このような経緯もあり、ポリシー設定は表現するべき情報が多く、リッチなドキュメントにしようとすると負荷がかかりやすくなるのではないか、と思っています。

とにかく「ドキュメントのメンテナンスが大変な割には、役立つ場面がない」というのは避けたいところです。

おわりに

今回はポリシー変更作業とその自動化にフォーカスをあてましたが、総じて以下のようなことが言えるかなと思います。

  • 自動化対象の作業のそもそもの難しさが、自動化の難しさに強く反映されることがある
  • 自動化によって解決したい課題が、その難しさの中にある場合がある
  • 自動化しやすい部分だけに終始すると課題がおいてけぼりになることがあるため、整理整頓と見極めが必要

いわゆる「スモールスタートでやっていきましょう」となった場合でも、難しさや課題を見据えて始めるかどうかは、重要なことだと感じています。

リードタイムと会議体

はじめに

業務を効率化しよう、という話の時によく出てくる時間に対する概念が、リードタイムとプロセスタイムという考え方です。

  • プロセスタイム: 何かを実際に作業している時間そのもの
  • リードタイム: 待機やコミュニケーションを含めた、最初から最後までの時間

「プロセスタイムだけ短縮しても、業務の効率化になりにくい」という話も聞きます。

また、リードタイムは本当にちょっとしたことで伸びてしまうなと思うことが良くあります。

会議体がリードタイムを左右するとき

特に日常的に感じるのは、会議体によってリードタイムが左右される場合があることです。

例えば、何かを準備して誰かにレビューしてもらう場合、レビュアーの都合がつかないとなかなかレビューができません。忙しい人の場合「あとで見ておく」よりも「それ用の場(時間)を設けて、同期コミュニケーションを取りながら実施する」という形をとることもあります。

しかし忙しい人は忙しいので、

  • 予定を確保するのが難しい → 予定が先の方になる → リードタイムが伸びてしまう

ということになりかねません。

そこで、予定を確保するために「毎週水曜日15:00 - 16:00はレビュー会」のように定期イベントにする方法もあります。週次にすれば、ある程度レビューしてもらえる目途を立てることができます。

会議体エンジニアリング

(見出しは「○○エンジニアリング」と呼べば自分のモチベーションが沸くので適当な造語です)

レビューからちょっと話を広げますが、定例化が良くない方向に向かうこともあります。

「ちょっとしたことだから次の定例でついでに確認しよう」が重なると、これまたリードタイムが伸びてしまったりします。

「ちょっとしたこと」が「すぐ判断できること」だとした場合でも、その判断が次のプロセスに大きな影響がある場合は、もはやちょっとしたことではなくなってきます。

そのような場合は、可能な限り定例会を待たずに確認するがよいのでしょう。

定例会は、活用はしても依存はしない、というのが私の心がけです。

[Ansible/AAP] 実行環境(EE: Execution Environment)を1つにまとめる必要性と分ける必要性

はじめに

AAP(Ansible Automation Platform)や ansible-navigator(のデフォルト)では、コンテナ内で Playbook を実行する仕組みになっています。

この Playbook を実行するためのコンテナ環境のことを、実行環境(EE: Execution Environment)と呼びます。EE に含める ansible-core のバージョンにするか、どのコレクションのどのバージョンを入れるかなどを考える必要があります。

www.redhat.com

もう一つの考慮点としては、どういう単位で EE とまとめるか、という点もあります。

開発や運用の体制、自動化対象の種別などによって、分け方がいろいろあるかもしれません。あまり絶対的な正解がない類の話であり、「ケースバイケース」と一言で言ってしまえばそれまでです。

しかし「一つまとめる必要がある場合」や、逆に「分ける必要がある場合」もあります。私が思いつく範囲ですが、それぞれどういう時なのかを簡単にまとめます。

一つまとめる必要がある場合

EE を一つにまとめる必要がある場合についてです。

ジョブテンプレート内の処理に対応できるようにまとめる

仕様上、AAP の1つのジョブテンプレートに対して、EEは1つのみ割り当てる関係です。1つのジョブテンプレートに2つ以上の EE を割り当てることはできません(AnsibleがどちらのEEを使えばいいか分からなくなってしまう)。

そのため、そのジョブテンプレートを実行するためのあれこれ(コレクション、Pythonライブラリ、Systemパッケージなど)を1つのEEにまとめる必要があります。

たとえば、1つのジョブテンプレートのなかで、Cisco IOS 機器向けの処理とAzure 向けの処理がある場合は、それぞれの処理に必要なもの(この場合 cisco.ios コレクション、azure.azcollection コレクション、依存パッケージ)を入れた EE にしておく必要があります。

もし、「そもそも ジョブテンプレート分けちゃった方がいいね」となったらまとめる必要はなくなります(どちらでもよくなる)。

分ける必要がある場合

EE を分ける必要がある場合についてです。

ansible-core のバージョンを分ける

「ジョブテンプレートAは ansible-core 2.18 系、ジョブテンプレートBは ansible-core 2.16 系で実行する」のような場合は、利用する ansible-core のバージョンを分ける場合は、EE を分ける必要があります。

たとえば、RHEL 9 向けのジョブテンプレート、RHEL 8 向けのジョブテンプレートがあって、基本的には新しめの ansible-core を使いたい、という場合です。

現状、AAP のライフサイクルのページでは、ansible-core 2.18 では「Supported Managed OS (RHEL)」が RHEL 9 – 10 となっており、RHEL 8が含まれていません。RHEL 8 が含まれているのは ansible-core 2.16 までです。このような経緯で、RHEL 9 向けには ansible-core 2.18、RHEL 8 向けには ansible-core 2.16 を使いたい場合は EE を分ける必要があります。

ただし、Playbook は必ずしも別にする必要はありません。例えば、各OS に対して ansible.builtin.dnf モジュールを使った同じ処理をするのであれば共通の Playbook を用意したうえで、以下のような組み合わせでジョブテンプレートを作る方法があります(名称はすべて例です)。

対象 ジョブテンプレート EE Playbook
RHEL 8 update_rhel8 ee-rhel8 rhel_update.yml(共通)
RHEL 9 update_rhel9 ee-rhel9 rhel_update.yml (共通)

なお、ansible-core のバージョンによって、サポートしている Python のバージョンの範囲が決まっています。少なくとも AAP 標準の EE であれば正しい組み合わせになっているはずですが、他をベースイメージに利用しているなどの場合は気にする必要があります。組み合わせは「ansible-core support matrix」の表で分かります。

コレクションのバージョンを分ける

前述の ansible-core のバージョンを分ける場合と似ていますが、コレクションのバージョンを使い分ける場合も EE を分ける必要があります。

たとえば、しばらく前の話ですが、ネットワーク機器向けの共通コレクションである ansible.netcommon コレクションはどこかのバージョン(確か 5.0.0)で破壊的な変更があり、cisco.ios などの OS 別コレクションのバージョンとの組み合わせを強く意識する必要がありました。このような場合は、この組み合わせの EE、この組み合わせの EE・・と分ける必要があります。

依存性の問題で分ける

ちょっと記憶があやふやなのですが、とあるコレクションが多くの Python パッケージを必要としていて、ほかのコレクションと依存性の関係で相性が良くない、という話を聞いたことがあります(自分がそういったのかさえあやふや・・)。

具体的にどういうコレクションの組み合わせかというのは指し示せませんが、ない話ではないと思います。どうにもこうにもできない場合は EEを分ける必要があります。

おわりに

EEを1つにまとめる必要がある場合と、分ける必要がある場合についてまとめました。

今回は仕様上「必要がある」という温度感での話でしたが、運用管理面で「~したほうがよい」という見方の話もあるかなと思います。