为什么变量中会有多余的空白{}?

时间:2019-04-23 02:19:30

标签: ansible jinja2

尝试创建字典,并且在返回的数据集中看到额外的空白{}。尝试通过以下几种方法来解决此问题。

 - name: thing
  set_fact:
    makeDict: "
       {% set BuildArr = [] -%}
        {%- for number in range(1, 5) -%}
          { {% set ignored = BuildArr.extend([{
                        'Number1': number|string,
                        'Number2': number|string,
                        'Number3': number
                        }]) -%}}
        {%- endfor %}
        {{ BuildArr }}"
- name: try_again
  debug:
    var: UserGroupArray

输出:

TASK [try_again] ***********************************************************************************************************************ok: [localhost] => {
"UserGroupArray": " { }{ }{ }{ } [{'Number2': u'1', 'Number3': 1, 'Number1': u'1'}, {'Number2': u'2', 'Number3': 2, 'Number1': u'2'}, {'Number2': u'3', 'Number3': 3, 'Number1': u'3'}, {'Number2': u'4', 'Number3': 4, 'Number1': u'4'}]"

}

2 个答案:

答案 0 :(得分:1)

  

并且在返回的数据集中看到额外的空白{}

因为您已经在其中放置了一个。此块中的第一个{和最后一个}不是Jinja模板标记,它们是文字{}

      { {% set ignored = BuildArr.extend([{
                    'Number1': number|string,
                    'Number2': number|string,
                    'Number3': number
                    }]) -%}}

我想你想要

      {% set ignored = BuildArr.extend([{
                    'Number1': number|string,
                    'Number2': number|string,
                    'Number3': number
                    }]) -%}

答案 1 :(得分:1)

可以使用

combine 代替 extend 。例如下面的播放

- name: Create my_dict
  set_fact:
    my_dict: "{{ my_dict|default({})|combine({('No' + item): item}) }}"
  with_sequence: start=1 end=4
- debug:
    var: my_dict

给予:

"my_dict": {
    "No1": "1", 
    "No2": "2", 
    "No3": "3", 
    "No4": "4"
}