2016-12-01 6 views
0

변수가 배열 [{'foo':1},{'bar':2}]입니다. 나는 다음과 같은 해시와 결합 할 (?) 설정된 사실을 같은 내 출력이 등록 된 변수가 사용 {'baz':3} : 나는 combine 필터로 검토 한Aniable & Jinja2 : 목록의 각 요소에 사전을 결합하십시오

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

하지만, 그것은 단지 때 이미 작동 함께 작업 할 해시가 있어야합니다. 제 경우에는 배열이 있습니다.

실용적인 방법을 사용하여이를 달성 할 수있는 방법이 있습니까?

답변

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