tech::hexagram

personal note for technical issue.

ansibleでrubyのArray#zipみたいなことをやる

varsで定義した2つの同じ要素数のリストをrubyのArray#zipみたいに結合してよしなに何かする場合のサンプル。

template module で利用するJinja2というpythonのテンプレートエンジンが、yamlでも展開して利用できる。

- name: "hogehoge"
  vars:
    list1:
      - "1"
      - "2"
      - "3"
    list2:
      - "a"
      - "b"
      - "c"
    list3: |
       {% set o = [] %}
       {% for i in list1 %}
       {% set _ = o.append({ 'hoge': i, 'huga': list2[loop.index0]}) %}
       {% endfor %}
       {{ o }}
# list3 = [ {hoge: 1, huga: a}, {hoge: 2, huga: b}, {hoge: 3, huga: c} ] のようになる

参考

Template Designer Documentation — Jinja2 Documentation (2.8-dev)

ほげめも: Ansible の Jinja2 を活用する