2016-12-01 15 views
0

私は変数が配列[{'foo':1},{'bar':2}]です。 (?):私は、次のハッシュとそれを組み合わせるしたい {'baz':3}セットの事実を使用して、このような私の出力登録の変数としては、次のとおりです。Aniable&Jinja2:リストの各要素に辞書を組み合わせます

[{'foo':1, 'baz':3},{'bar':2, 'baz':3}] 

私はcombineフィルタに見てきたが、ときすでに、私それだけで動作します一緒に作業するハッシュを持っています。私の場合は配列があります。

これを実現する方法はありますか?

答えて

2

実は、私は方法を発見しました。 mapは、任意のフィルタを使用することができ、および引数はコンマ

- name: test 
    set_fact: 
    _test: "{{ [{'foo':1}, {'bar':2}] | map('combine', {'baz':3}) | list }}" 

経過する必要が生じ:

ok: [localhost] => { 
    "_test": [ 
     { 
      "baz": 3, 
      "foo": 1 
     }, 
     { 
      "bar": 2, 
      "baz": 3 
     } 
    ] 
} 
+0

ええ、 'map'フィルターを忘れました。 –

0

Jinja2のは、リストの内包を持っていないが、私はあなたがそれを達成するためにsetforループを使用することができると思う:

{% set outputarray = [] -%} 
{% for d in inputarray -%} 
    {% set r = d|combine({'baz': 3}) -%} 
    {{ ouputarray.append(r) and '' }} 
{%- endfor %} 
+0

おかげで、私は私のansible脚本、またはどのように私はこれを含まないことを置くことができますか?このようなコードは決して見られません – Stephane

+0

YAMLファイルの先頭に置くことができ、設定で '{{outputarray}} 'を参照することができます。 –

+0

助けてくれてありがとう、私は何かを学んだ。簡単な解決策も見つかりました:) – Stephane

関連する問題