Jinja2 フィルタで構造化データを変換する
Pro会員限定上級約38分6レッスン
人事システムのアカウント台帳や、アプリの既定値と本番の上書き値など、Ansible には入れ子のデータが流れてきます。selectattr・map・items2dict・combine・extract・from_json で、必要な形にデータを変換する書き方を身につけます。
対象者: 変数の加工のために shell や set_fact を何段も重ねている方 / テンプレートの式が読めずに困っている方
前提知識: 動的インベントリと constructed 修了程度
この教材を終えると、できるようになること
- 辞書のリストを selectattr で絞り、map(attribute=...) で値だけのリストにできるようになる。
- items2dict(key_name / value_name)で、辞書のリストから引き当て用の辞書を作れるようになる。
- combine の既定(浅いマージ)と recursive=true(深いマージ)の違いを説明し、既定値と上書き値を正しく合成できるようになる。
- groups と hostvars を map('extract', hostvars, ...) で組み合わせ、他のホストの変数をテンプレートに並べられるようになる。
- register した stdout(文字列)を from_json で辞書にし、中の値を取り出せるようになる。
修了後の姿: 大規模・複数チームで使えるAnsibleコードを設計・テスト・配布し、変更をエラーを出さずに安全に本番へ流せる自動化エンジニアへ。
Chapter 1データを、使う形に変える
リストの絞り込み・辞書への変換・入れ子のマージ・hostvars からの抽出・JSON の読み込みを練習します。
- selectattr と map で必要なものだけ取り出す在籍中のアカウント名だけのリストを作る約7分(有料会員限定)
- リストを辞書にする(items2dict)名前 → uid の対応表を作る約6分(有料会員限定)
- 入れ子の辞書をマージする(combine と recursive)上書きしたら、DB のポートが消えた約7分(有料会員限定)
- hostvars から値を集める(map('extract', ...))LB の設定に、web の IP アドレスを並べる約8分(有料会員限定)
- コマンドの JSON 出力を読む(from_json)stdout は文字列。辞書にしてから中身を読む約6分(有料会員限定)
Chapter 2確認クイズ
データ変換のフィルタの理解度をチェック。