以下の内容はhttps://tekunabe.hatenablog.jp/より取得しました。


リードタイムと会議体

はじめに

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

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

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

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

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

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

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

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

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

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

そこで、予定を確保するために「毎週水曜日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つにまとめる必要がある場合と、分ける必要がある場合についてまとめました。

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

自動化の難易度は機能とパラメーターのセットで考える

はじめに

Ansible のような自動化ツールを扱っていると「自動化できるか、できないか」のような調査をすることがあります。

この手のものは、機能面だけは判断できないなと思うことがあるので、簡単ですが自分の考えをまとめます。当たり前のことばかりかもしれません。

パラメーターのべた書きが通用しない

Ansible であれば、たとえば「サンプル Playbook を書いて実行したら思った通りに動いた!」と結果が得られたとします。

検証時点では、モジュールに指定するパラメーターがべた書きだったり、変数化したとしても「こういう変数があったとします」という前提で書くことが多いです。いずれの場合もうまく動くように都合よくパラメーターを準備したりするものです。

実際業務で使うにあたっては、都合のいいパラメーターはどこからか降ってくるわけではありません。むしろパラメーターを準備する方が大変、という感覚すらあります。

だとすると「機能が簡単に作れる = 簡単に自動化できる」とは限らない話になります。

パラメーターはどこからやってくる?

自動化の文脈でパラメーターといえば、何かしらのフォーマットでパラメーターが書かれたものが依頼元からやってくる業務の流れです。Excel ファイルによる申請書が代表的でしょうか。

このパラメーターをもとに自動化することになるのですが、このタイミングだけでも少なくとも以下の点が考慮点になります。

  1. このパラメーターはどのようにして求められたのだろう?どれだけ時間がかかるものなんだろう?
  2. このパラメーターを自動化にどう適用すればいいだろう?

「自動化」をシステム面だけで考えると2の方が関心ごとになります。しかし、業務面も含めて考えると1の方も関心ごとになります。

もし「実際に適用するパラメーターが決まってからの作業は実は時間がかかってなくて、上記の1と2に時間がかかっていた」という場合は、自動化の機能だけ作りこんでも、なかなか効率化が見込みにくくなってしまいます。

そのため、自動化を考えるにあたっては「機能をどう作るか」だけでなく「パラメーターをどう準備するか」もセットで考える必要があると捉えています。

たとえば ACL 変更

ちょっと抽象的な話が続いたので、少し具体的な話をします。

例えば、ACL やファイアウォールポリシーの追加、変更、削除に利用するパラメーターです。

Ansible でいうと使えそうなモジュールは割とすぐ思いつくのですが、この手の作業はパラメーター準備がかなり難しい作業だと思っています。

というのも「この通信を通すように変更してください」という要件は、エンドツーエンドだったりします。ところが、実際のネットワーク構成は、そのエンドツーエンドの間に複数の機器が挟まっていることがよくあります。

となると、そもそも

  • どの機器が設定対象か

から調べ上げる必要があります。ほかにも、

  • どのような設定を入れるか
  • どういう順番の設定にするか

など考慮点は多いです。

この話はできればもう少し深堀りして別の記事にしたいと思います。

パラメーター準備のパターン

やってきたパラメーターをそのまま自動化に適用できるのが一番簡単なパターンですが、簡単な順に上げると以下の大きな括りになるかと思います。

  • パターン1: そのまま機能に適用
  • パターン2: パラメーター内のキーなどをもとに、自動的に導出して機能に適用
  • パターン3: パラメーター内のキーなどをもとに、人が導出して機能に適用

パターン3(人が導出)がなかなか悩ましいですね。ここにリードタイムがかかっている場合は、その後のプロセスタイムを自動化で短縮できたとしても、業務全体で見ると思うような効果が得られないことになります。対比するために極端な例を挙げるとすると、実は「パラメーターの準備を自動化すべきであって、その後の処理は今までのツールを使えばいい」というケースもあるのかもしれません。

また、本記事タイトルにある「難易度」の観点とはそれますが、仮にパターン1(そのまま)だとしても、業務の流れの中でコピペが多いとミスの原因になり得てしまいます。もし、自動化の目的がオペミスの低減なのであれば、コピペをなくすにはどうすればよいか、は外せない視点になります。そうでなくてもコピペは少ない方が楽ですね。

おわりに

あまりまとまりがないですが、パラメーターをどう準備するかという点に重要性を感じる場面が多々あったため、自分なりに書きとどめてみました。

何かが難しいと感じた場合、処理自体が難しいのか(狭義の自動化処理)、そもそも業務自体が難しいのかといったところも見極めポイントに感じています。

検証フェーズだと、つい機能面に終始してまいそうですが、業務の流れや運用を見据えたうえで検証したいものです。

[Ansible] github.com/ansible 配下のリポジトリでコミット署名が必須になる(2026/03/16 から)

はじめに

Ansible 本体や関連ツールは GitHub の ansible という Organization のリポジトリで管理されています。

(コレクションは別 Organization の ansible-collections など)

ギリギリのタイミングで知ったのですが、2026/03/16 から https://github.com/ansible/ 配下のすべてのリポジトリで、署名付きコミットが必須になるそうです。

詳細は以下の Ansible Forum のトピックをご参照ください。私もこれで知りました。

forum.ansible.com

書名付きのコミットとは?

GitHub でいうと、しばしば見かける Verified がついてるコミットです。

Verified

と、あたかも元々知っているように書いてしまいましたが、正直に言いますとVerified 自体は見たことあるけどどういうことなのか分かっていませんでした。なので、このタイミングで意味をはじめて知りました。

設定

せっかくなのでこのタイミングで、 GitHub のドキュメントなどを参考にして署名付きでコミットできように設定しておきました。

docs.github.com

qiita.com

方式アンケート

皆さんがどの方式で設定しているのか気になったので、アンケートを取ってみました、ご回答いただいたみなさま、ありがとうございます。

おわりに

こういう機会がないとほっといていた気もするので、意味を知ったり設定をしたりする良い機会になりました。

[Ansible/AAP] ジョブの状態(成功、失敗など)の GUI と API でそれぞれ確認する

はじめに

AAP (Ansible Automation Platform) はジョブの状態を API で取得できます。

レスポンスボディの JSON のうち、status を見ると、実行中なのか終わって成功したのかなどを確認できます。一方、failed という、これまたある意味状態を示しそうな項目もあります。

それぞれの関係について知らべたかったので、GUI 上の見え方、status の値、failed の値をセットで確認したことをまとめます。

  • 検証環境
    • AAP 2.5 2025/04/09 パッチリリース

API によるジョブの状態を取得には、https://{AAPホスト}/api/controller/v2/jobs/{id} を GET します。本記事ではレスポンスボディの JSON を抜粋して掲載します。

あくまで、私の環境で試したらこうなったという記録であり、リファレンスではありませんのでご了承ください。

先にまとめ

先にまとめます。

GUI 上 API の status API の failed
成功 "successful" false
実行中 "running" false
失敗 "failed" true
エラー "error" true
取り消し済み "canceled" true
保留中 "pending" false

なお、API のドキュメントによると status のバリエーションには他にも newwaiting がありますが、再現できませんでした。

成功

ごく普通にジョブテンプレートが起動できて、正常に終わったパターンです。

GUI:

成功

API:

{
    // 略
    "status": "successful",
    // 略
    "failed": false,
    // 略
}

特筆すべきところはないかなと思います。"status": "successful" なので成功だということが分かりますし、"failed": false なので、失敗はしていないことも分かります。

実行中

ジョブの実行が開始されたけど、まだ実行中で終わっていない状態です。

API でジョブテンプレートの実行のリクエスト(POST /api/controller/v2/job_templates/{id}/launch/)した場合でも、非同期に実行を開始するので、実行が完了しないうちに状態を確認すると実行中になります。

GUI:

実行中

API:

{
    // 略
   "status": "running",
    "execution_environment": 4,
    "failed": false,
    // 略
}

実行中であり、まだ成功か失敗かも分からない状態です。"failed": false です。

失敗

ジョブを実行したけど、正常に完了しなかったケースです。

今回は、マネージドノードに接続できない状態で再現しました。

GUI:

失敗

API:

{
    // 略
    "status": "failed",
    // 略
    "failed": true,
    // 略
}

"failed": true となりました。明示的に、これは失敗、と示された印象です。

エラー

[2026/03/12 20:30 追記]

「エラー」の状態は、本記事の投稿当初は再現できていなかったのですが X で情報をいただきました

検証環境がハイブリッドノード1つだったのでどうやろうかと思ったのですが、 receptor という名前のコンテナを停止(systemctl stop receptor.service --user)した状態でジョブテンプレートを起動したら「エラー」を再現できました。

GUI:

エラー

(せっかくなのでログも)

エラーの詳細

API:

{
    // 略
    "status": "error",
    // 略
    "failed": true,
    // 略
}

取り消し済み

実行を開始したけど、完了前に取り消しした状態です。

今回はGUI上で「ジョブの取り消し」ボタンを押して再現しました。

GUI:

取り消し済み

API:

{
    // 略
    "status": "canceled",
    // 略
    "failed": true,
    // 略
}

"failed": true になるのは少し意外でした。

保留中

たとえば、ジョブテンプレートの同時実行が許可されていない設定(デフォルト)で、立て続けに同じジョブテンプレートを実行開始した場合は2回目以降の起動が保留になります。

GUI:

保留中

API:

{
    // 略
    "status": "pending",
    // 略
    "failed": false,
    // 略
}

おわりに

成功したかどうかは、"failed": false ではなく "status": "successful" を見るのが良いのかなと思いました。

ドキュメント自動生成の前に考えたいこと

はじめに

技術の進歩は早く、少し前に「あんなことできたらいいなぁ」と思っていたことが、結構身近に感じることも多くなりました。

ドキュメントの自動生成もその一つです。

ですが「できるようになった」=「やるべき」とは限りません。仮に誰も(AI含め)読まないドキュメントを生成しても、意味がないでしょう。

この記事では(体系的ではなくメモ書き程度ですが)飛びつく前に個人的にこの辺は考えておきたいなと思っている点を書きます。

先に簡単にまとめますと、ドキュメントを自動生成する前に、そのドキュメントの「目的(具体的な利用シーンを含む)」と「メンテナンス方法」を定義すべきだと私は考えています。

各ドキュメントの性質の違いを押さえる

一口にドキュメントといっても、本当に様々なものがあります。提案書、設計書、仕様書、手順書などなど。

名前をつけてラベリングすることはとても便利ではありますが、反面、記号的な意味しか持たず、何を指すのかがぼやけることもあります。

よく「そのドキュメントの目的は何か?」のように考えるタイミングはあると思いますが、目的(や性質)を以下のように分解して考えてみたいところです。

  • 誰が、なぜ、いつ、読むか
  • 誰が、なぜ、いつ、書くか
  • 誰が、なぜ、いつ、メンテナンスするか
  • 意図を示すものか、実装(設定)を示すものか

もっとシステマチックに 5W1H と「書く・読む・メンテナンス」を組み合わせてもいいかもしれませんが、この段階ではHow(どのように)はやや優先度が低そうです。

以下、設計書とパラメーターシートに絞って少し掘り下げてみます。

設計書

単に「設計書を書いて」と言われたら、どんなものをイメージすればよいでしょうか。

「このフォーマット参考にして」と渡してもらったとしても、目的や利用シーンをおさえておかないと、意味のないものを書いてしまったり、カスタマイズするときに明後日の方向に行ってしまったりすることもあり得ます。

私は多くの場合「設計書」と言われたら、まずいったん、設計の方針のようなものを書くものだと捉えます。たとえば、コーディング規約、命名規則、処理の分割方針などです。

先ほどのポイントを押さえながら目的を表現すると以下の通りです。

  • 新規開発時に、開発者が迷わず実装できるようにするために書く
  • 機能追加や修正時に、開発者が読み、迷わず追加や修正できるようにするために書く
  • あとからプロジェクトに参入した人が実装を追うための手がかりにするために書く
  • 方針変更や追加があったら開発者、設計者がメンテナンスする
    • 逆に、ちょっとしたコード修正時はドキュメント修正は発生しない
  • 実装よりも意図を示すもの

「実装を追うための手がかり」のレベル感が肝で、例えば「あれ系の処理ならこのディレクトリにあるはずだな。どれどれ・・」を促す程度が分かるイメージです。抽象度が高めで、実装との乖離も発生しにくいタイプです。

仮に「そのドキュメントを見れば完全に処理が分かる」ようなものが期待されていると、実装からドキュメント生成という方向が向いていそうです。それができない場合は、実装との乖離が発生しないようなプロセスを整備したり、実装のどの時点のドキュメントなのかを管理する必要があります。

私が思う設計書は、方針の取り決め的なものなのであり、基本的には実装からドキュメント生成という方向はないです。

ただし「今の実装と今のドキュメントを照らし合わせて、ドキュメントに反映したほうがいいものを提案して」と生成AIに依頼するのはありかもしれません。

パラメーターシート

「パラメーターシート」と言われたらどうでしょうか。ここでは、サーバーやプロダクトの設定を事細かに書いたものという前提を置きます。

事細かに書くので、なかなか労力がかかります。目的もなく作成すると、徒労に終わってしまうかもしれないためなかなか注意が必要です。

目的を表現すると以下の通りです。

  • 利用者が設定を確認するために書く
    • ドキュメント上でしか設定を確認できない場合など
  • 設定が変更、追加されたらメンテナンスする
  • 意図よりも設定を示すもの

前述の私が思う設計書とは違い、方針というより実装(または設定)を示すドキュメントなので、実装(設定)から自動生成したくなる気持ちが強くなる類のドキュメントかなと思います。

IaC的に管理していて、もしそれだけで事が済む場合はであればドキュメントを人が作る必要はないでしょう。ただし、生成AIによって作成コストが極端に落ちて「事が済む」の判定基準がガラッと変わる場合は、この限りではありません。

とはいえ、冒頭にも書きましたが、誰も(AI含め)読まないドキュメントを生成しても、意味がないどころか、場合によっては混乱のもとになってしまうこともあるかもしれません。

一度自動生成したらおわり?メンテナンスする?

仮にドキュメントを自動生成したとして、そのドキュメントは継続的なメンテナンスが必要なものでしょうか?

どうメンテナンスするか、しないのか、も見越して考えないと破綻してしまいます。

ケース1: 一度生成して終わり

一度生成すれば良くて、実装や要件が変わってもメンテナンスする必要がなく、正しく有益な情報を与える状態を維持し続けられるケースです。

実際のところ、あまり多いケースではないような気もします。

ケース2: メンテナンス含めて自動生成する必要がある

自動生成のたびにドキュメントのフォーマットや章立てがころころ変わったりすると、人間が読むのに負荷がかかってしまいます。その辺を含めてうまく仕組み化する必要があります。

ネットワーク図のようにビジュアル要素が強いドキュメントは特に難しそうです。

ケース3: 一度修正したあとは手動でメンテナンス

メンテナンスは必要だけど自動生成し続けられないケースです。もしかしたら結構あるケースかもしれません。

自動生成したときの楽しいノリに任せて、手動でメンテナンスしにくいものを生成してしまうと、次第に当てにならないドキュメントなり、機能しなくなってしまう可能性があります。自動生成し続けられない場合は、手動でのメンテナンスを見越したボリューム、粒度にする必要があるでしょう。

まとめ

ドキュメントの話は対象分野や風習、価値観などによって呼び方や内容が大きく変わります。

なので、この記事内容で汎用的な考え方を定義できたとは思っていませんが、少なくともドキュメントの「目的」と「メンテナンス方法」は定義する必要はあるだろうなと思っています。

[Ansible] tagged, untagged, all タグを Playbook 内で適用すると警告が表示されようになった(ansible-core 2.20.0 から)

はじめに

Ansible には、Playbook 内の実行するタスクを細かく制御するためのタグという機能があります。例えば、ansible-playbook コマンドのオプションで --tags sakana を指定したら、sakana というタグが適用されているタスクのみが実行される、というものです。(厳密にはタスク以外に Play などの単位でもタグを適用できる)

タグは基本的に任意の文字列を使えますが、いくつか特殊な用途として予約されたタグがあります。たとえば、ansible-playbook コマンドのオプションで指定するタとしては、taggeduntaggedall という予約されたタグがあります。

  • tagged: 何かしらのタグが適用されているタスクを実行
  • untagged: タグが適用されていないタスクを実行
  • all: すべてのタスク(ただし never 以外)を実行

これら 3つの予約されたタグは、ansible-playbook コマンドのオプションで指定する特殊なタグなので、Playbook 内には適用できません。正確には「適用(tags ディレクティブに指定)すること自体はできるけど、適用した人の意図通りの挙動にはならない」という状態でした。つまり、うっかり taggeduntaggedall というタグを Playbook 内で適用できてしまう状態でした。

2025年11月にリリースされた ansible-core 2.20.0 では、こんなうっかりを発見できるように、警告が表示されるようになりました。親切設計ですね。

  • ansible-core 2.20.0 CHANGELOGより引用
    • tags now warn when using reserved keywords.

    • ansible now warns if you use reserved tags that were only meant for selection and not for use in play.

どういう警告が表示されるのか、簡単に試してみたのでその結果をまとめます。

  • 検証環境
    • ansible-core 2.20.0

検証 Playbook

以下のように、taggeduntaggedall をそれぞれ適用した3つのタスクを準備しました。

---
- name: Tag Test Play
  hosts: localhost
  gather_facts: false

  tasks:
    - name: Tag test tagged
      ansible.builtin.debug:
        msg: "This task is tagged with 'tagged'"
      tags:
        - tagged

    - name: Tag test untagged
      ansible.builtin.debug:
        msg: "This task is tagged with 'untagged'"
      tags:
        - untagged

    - name: Tag test all
      ansible.builtin.debug:
        msg: "This task is tagged with 'all'"
      tags:
        - all

実行結果

Playbook を実行したところ、意図しない結果を生むのでおすすめしませんという警告(WARNING)が冒頭に表示されました。

$ ansible-playbook -i localhost, tag_test.yml
[WARNING]: Found reserved tagnames in tags: ['tagged'], we do not recommend doing this as it might give unexpected results
Origin: /home/sakana/ansible/ac220/tag_test.yml:11:9

 9         msg: "This task is tagged with 'tagged'"
10       tags:
11         - tagged
           ^ column 9

[WARNING]: Found reserved tagnames in tags: ['untagged'], we do not recommend doing this as it might give unexpected results
Origin: /home/sakana/ansible/ac220/tag_test.yml:17:9

15         msg: "This task is tagged with 'untagged'"
16       tags:
17         - untagged
           ^ column 9

[WARNING]: Found reserved tagnames in tags: ['all'], we do not recommend doing this as it might give unexpected results
Origin: /home/sakana/ansible/ac220/tag_test.yml:23:9

21         msg: "This task is tagged with 'all'"
22       tags:
23         - all
           ^ column 9


PLAY [Tag Test Play] *******************************************************************************

TASK [Tag test tagged] *****************************************************************************
ok: [localhost] => {
    "msg": "This task is tagged with 'tagged'"
}

TASK [Tag test untagged] ***************************************************************************
ok: [localhost] => {
    "msg": "This task is tagged with 'untagged'"
}

TASK [Tag test all] *********************************************************************************
ok: [localhost] => {
    "msg": "This task is tagged with 'all'"
}

PLAY RECAP *****************************************************************************************
localhost   : ok=3    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

比較のため、ansible-core 2.18.11 で実行したらエラーにはなりませんでした。

おわりに

taggeduntagged は、ネットワークの VLAN の文脈で使ってしまうことはあり得るかもしれません。all もまぁまぁ使ってしまうかもしれません。

意図しない挙動を誘発させてしまう状況では、警告やエラーでお知らせしてくれたほうがいいので、ありがたい変更でした。




以上の内容はhttps://tekunabe.hatenablog.jp/より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14