LoginSignup
3
1
記事投稿キャンペーン 「2024年!初アウトプットをしよう」

Ansible Tips: データ構造変換にはjinja2 for loopとfrom_yamlフィルターの組み合わせが使いやすい

Posted at

備忘

Ansibleはプログラミング言語ではないので、loopなどを伴うデータ変換は苦手。
その様な際には、jinja2 loopを利用してYAMLとしてデータを構成し、データに変換し直すとうまくいくことがある。

以下の様なデータ変換を行う

元データ

- - hoge1
  - - foo: FOO1
      bar: BAR1
    - foo: FOO2
      bar: BAR2
- - hoge2
  - - foo: FOO3
      bar: BAR3
    - foo: FOO4
      bar: BAR4

変換先データ

hoge1:
- FOO1/BAR1
- FOO2/BAR2
hoge2:
- FOO3/BAR3
- FOO4/BAR4

変換task例

  - debug:
      msg: "{{ target_yml | from_yaml }}"
    vars:
    
      source_data:
      - - hoge1
        - - foo: FOO1
            bar: BAR1
          - foo: FOO2
            bar: BAR2
      - - hoge2
        - - foo: FOO3
            bar: BAR3
          - foo: FOO4
            bar: BAR4
            
      target_yml: |
        {% for i0 in source_data %}
        {{ i0[0] }}:
        {% for i1 in i0[1] %}
        - {{ i1['foo'] }}/{{ i1['bar'] }}
        {% endfor %}
        {% endfor %}

変換例

TASK [debug] ***************************************************************************************************************************
ok: [localhost] => {
    "msg": {
        "hoge1": [
            "FOO1/BAR1",
            "FOO2/BAR2"
        ],
        "hoge2": [
            "FOO3/BAR3",
            "FOO4/BAR4"
        ]
    }
}
3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1