てくなべ (tekunabe)

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

[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 もまぁまぁ使ってしまうかもしれません。

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

JANOG57 Meeting in OSAKA オンライン参加レポート

はじめに

2026/02/11-13 に JANOG57 Meeting in OSAKA が開催されました。ホストはさくらインターネットさんです。

www.janog.gr.jp

現地参加はできませんでしたが、オンラインで参加しました。

登録者数は 6,000人を超え、実際の入場者数も合計 5,000 人を超えたとのことです。

本記事では、リアルタイムで視聴できたプログラムを中心にした感想や、全体的な所感についてまとめます。

なお、各プログラムの詳細ページから資料や、アーカイブ動画が公開される予定です(一部を除く)。

([2026/03/11 追記] アーカイブが公開されていました)

※ 参加された方でアンケート回答がまだの方は 2026/2/27 までにお忘れなく!

視聴プログラム

当日リアルタイムで視聴できたプログラムについての感想です。

(張り付いて見れていたわけではないので、一部は遡ってインプットしました)

ネットワークのデジタルツインに求める要件は何ですか?~理想的な仮想環境への期待と現状~

www.janog.gr.jp

自動化の文脈を含め、しばしば話題にあがるのが検証環境、ラボ環境をどうするかという課題。本プログラムはそんな「ネットワークのデジタルツイン」として何を求めるのかを整理、議論する場でした。

「デジタルツイン」という言葉自体はほかの分野でも利用されますが、ネットワークの分野では単なるラボ環境ではなく、より本番環境に近いモノをといった意味合いを感じました。

ネットワークデジタルツインの「実装の分類」では「数理モデル型」「仮想NW型」に分けて説明がされていました。仮想NW側のプロダクト例に Cisco Modeling Labs(CML)が載っていて、なじみがあってイメージが付きやすかったです。プロダクトや実装の話と対応させると分かりやすく感じてありがたいです。

お話を聞いて全体的に感じたのは、完全に本番環境と同じ環境にはできないので、その環境に何を期待して、何を期待しないのかを明確にすることが重要という点です。様々な立場の人が利用することになるため、これらの期待のすり合わせができていないと、全然使えないものという評価に落とされてしまいます。

たとえば、物理インターフェース名が本番環境と違うのはあるあるです。仮に「ふるまいが確認できればいい」と一言で言ったとしても、どのポートからどのポートにいくかという物理レベルの流れを「ふるまい」と指す人もいるでしょうし、IPレベルの経路を「ふるまい」と指す人もいるかもしれません。「ふるまい」という言葉がでてきたときはどのレイヤーの話なのかを合わせる必要があるなと思いました。

他に印象的だったのが、「信用を積み上げるプロセスを作る」というお話です。いきなり「これデジタルツインだから」とポンと渡されても、使う側はなかなか信用できません。なので、過去の障害を再現できることを確認するなどして、信用の起点を作り、積み上げるのが重要だというお話でした。ネットワークデジタルツインにかかわらず、いろいろなことに通じる話だなと思いました。

また、確か質疑応答の中であった「完璧なものではないという点は、従来の物理的な検証環境も同じ。従来もその環境でヨシとした経緯があったはず。仮想環境でも同様に、何が懸念で、どうだったらGoなのかを見極めることが重要」という趣旨のお話も印象的でした。新しいものにはどこか抵抗があったりもしますが、よく考えたら本質的には今まで同じ、という点も確かにありそうです。

発表内容でも質疑応答の時間でも containerlab の話が出てきたので、結構ちゃんと使われているのだなと思いました。

ほか「(完璧なものではなく)80点なら80点の活用方法がある」という意見も印象的でした。確かに。

生成AI × ネットワーク故障解析~AIエージェントを現場に導入して見えた課題と可能性~

www.janog.gr.jp

ネットワークの運用を支援するためにAIエージェントを利用して、そこから得られた評価や課題、可能性についてのプログラムでした。

こんなことできたらいいな、ではなく実際に試して得られたフィードバックから何を学んだか、という二周目、あるいはそれ以上のプログラムが増えてきました気がします。ありがたいです。

AI活用のアプローチにはさまざまあると思いますが、今回は「特定NWに特化しない」というコンセプトで作られたそうです。チューニングするのも大変なので、逆に利用者に柔軟に使ってもらうことを想定されていました。

具体的でわかりやすかったのは資料 P20 からの、役に立った例と役に立たなかった例です。役に立った例は、リソース状況やエラーログなどの確認。一方で、インターフェースのdown状態を正しく認識できない、コンフィグ生成時にACLの向きが考慮されないなどが役に立たなかった例として挙げられていました。

総じて、複数機器を組み合わせた「系」としての解析が難しいのかなという印象を受けました。ネットワーク的にはこの「系」で見ることが大事だったりしますよね。

この弱点を改善するために今回は、AIエージェントが状況に合わせて手順書などの外部情報を参照させる仕組みを組み合わせることを考えられたそうです。必要になってくるのは手順書や暗黙知なので、人間がきちんと情報を準備することがやはり重要そうです。

質疑応答のパートでのどなたかのお話で印象的だったのは、上級エンジニアの方がこの手のものを使いこなせていた、という事例です。スキルの底上げする目的で生成AIを導入するケースもあると思いますが、扱う対象業務や技術的な領域の理解の深さがモノを言うケースも結構多いのではないかと思います。

Local LLM×AIエージェントで挑むNOC DevOps — 商用AIOpsのリアル

www.janog.gr.jp

引き続き生成AIの話題。

いくつかトピックがありましたが、特に印象に残ったのは P11 からの「非構造化データの構造化」のお話です。

いかに有用なデータを準備するかが大きなポイントの一つになっていそうですが、これがまた大変そうでした。Excel や PowerPoint などで作成された既存の非構造データはそのままインプットにするには難しく、今回紹介された事例では Markdown に変換するツールを作成したそうです。

なかなか一筋縄ではいかないなと思いました。

当日はあまり視聴できなかったので、アーカイブが公開されたら改めて視聴しようと思います。

アーカイブ視聴予定

当日参加できたプログラム以外にも、興味深いプログラムがあるため、アーカイブが公開されたら視聴しようと思います。

主に以下のプログラムを中心に視聴予定です。

また、オフレコプログラムだったため配信がなかった 「エンジニアリングする『組織』の育て方」については、後日、資料や関連記事がアップされました。現地にいたらぜひ参加したいプログラムだったのでありがたいです。

プログラム以外

プログラム本編以外で感じたことです。

NOC

NOC の活動も SNS で見かけることが多かったです。

参加者からは、Wi-Fi が快適だったという意見を複数見かけたので、安定した環境が提供されていたようです。

以下のように、気になる取り組みもされていました。

x.com

また、実際に NOC を担当された方のブログも拝見しました。

野良BoF がたくさん

BoF (Birds Of a Feather)は、通常のプログラムとは別で行われる座談会に近い場です。野良BoFは委員会による選考をしない点も特徴です。

通常はオンライン配信も行われないので、現地ならではの場です。

www.janog.gr.jp

すごい多いですね。もし現地にいたら、ぜひとも「NW自動化/SRE/NREについて語るBoF」「ネットワーク自律化BoF」などは参加してみたかったものです。

大盛況の現地

冒頭にも書きましたが、現地に非常に多くの参加者がいた影響で、会場間の移動にお約束事(プロトコル)が設けられたようです。

www.janog.gr.jp

各プログラムの終了時も、退場と次のプログラムの入場は別の扉を使う旨のアナウンスがされていました。

混雑による事故防止のため、スタッフの皆様は難しくて素早い判断が迫られたのではないかなと思います。お疲れさまでした。私は趣味でイベントやライブ会場に足を運ぶこともありますが、人の流れを制御するのって大変そうだなと思っています。

展示ブースインタビュー

スタッフの方によるブースへのインタビューが YouTube Live で配信されていました。ブース側の現地の盛り上がりも伝わってきました。

www.janog.gr.jp

リモートでも参加してる感が得られる Slack

「オンライン参加であれば、あとでアーカイブ見ればよくない?」という考え方もありますが、リアルタイムで見るメリットは Slack でコメントや質問を通じて参加できる点です。

今回もちょこちょこ活用させていただきました。

www.janog.gr.jp

弊社からスタッフ

[2026/03/03 追記]

あとから知ったのですが、今回は弊社(エーピーコミュニケーションズ)社員がスタッフとして参加していました。お疲れさまでした。

www.janog.gr.jp

おわりに

やはり今回も AI の話が増えてきたような印象でした。さまざまな経験や知見を共有いただけるのはありがたいです。全体的に、生成AIの話は「できる/できない」ではなく、精度や性能の話に移っている印象を受けました。

この度は、スタッフのみなさま、登壇者のみなさま、ホスト企業のみなさま、ありがとうございました!

また、弊社のブース対応をしてくれたメンバーにも感謝です。

次回の JANOG 58 は 2026/07/15-17 に愛媛県松山市で開催予定。アリスタネットワークスジャパンさんがホスト。四国での JANOG 開催はこれで3県目で、4県までリーチだそうです。副社長が松山出身というご縁があるそうです。

次回予告 (PDF)

参考

show int さんの関連動画

事前

www.youtube.com

ふりかえり

www.youtube.com

X ポストまとめ

実況ポスト、まとめありがとうございます!

posfie.com

私と JANOG のこれまで

[Ansible] to_json や to_nice_json フィルターで日本語が Unicode エスケープされないようにする

はじめに

Ansible には、いい感じのフォーマットの JSON に変換するためのansible.builtin.to_nice_json フィルターがあります。

tekunabe.hatenablog.jp

日本語(おそらく非ASCII)が含まれているとデフォルトでは以下のように Unicode エスケープされます。

{
    "name": "\u51fa\u753a\u67f3"
}

ファイル出力時に不都合だったりするでエスケープされない方法を調べたら、このフィルターに ensure_ascii オプションがあって、これを無効にすると良いことが分かりました。

簡単ですが、試した結果をまとめます。

なお ansible.builtin.to_json フィルターにも ensure_ascii オプションがありますが、この記事のサンプルでは ansible.builtin.to_nice_json を利用します。

  • 検証環境
    • ansible-core 2.19.2

おためし

以下の Playbook でためします。

---
- name: JSON Test
  hosts: localhost
  gather_facts: false
  connection: local

  tasks:
    - name: Test to_nice_json
      ansible.builtin.copy:
        content: "{{ station | ansible.builtin.to_nice_json(ensure_ascii=false) }}"
        dest: station.json
      vars:
        station:
          name: 出町柳

実行すると、出力先の station.json は、以下のように日本語が普通に読める形式になります。

{
    "name": "出町柳"
}

なお、

    content: "{{ station | to_nice_json }}"

と指定したときは、ensure_ascii がデフォルトの true なので、以下のようになります(「はじめに」に載せた通り)。

{
    "name": "\u51fa\u753a\u67f3"
}

おわりに

この方法がうまくいくには環境的な条件があるかもしれませんが、試す価値はあるかなと思います。

[Ansible/AAP] コンテナ版 AAP のアンインストール方法

基本は Playbook ansible.containerized_installer.uninstall の実行

コンテナ版の AAP (Ansible Automation Platform) のインストール用コレクション ansible.containerized_installer の中には、ansible.containerized_installer.uninstall という Playbook があります。

AAP 2.6 のドキュメントにも、以下の実行コマンドが記載されています。

ansible-playbook -i inventory ansible.containerized_installer.uninstall

ドキュメント上は基本このくらいでなのすが、KB 上はもう少し記載があります。

対応 KB

要ログインなので、リンクのご紹介程度にしますが、「How to uninstall Containerized Ansible Automation Platform?」という KB に、アンインストール Playbook の実行後のディレクトリ削除、イメージ削除などが加えられた手順が掲載されています。

access.redhat.com

KB にあること自体を忘れそうなので、自分のブログ経由でただりつけるように記事としておいておきます。