備忘
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"
]
}
}