Ansible Jinja2未使用with_items连接到列表

时间:2019-05-29 14:44:51

标签: ansible jinja2

为什么new_list也没有被串联?

---
- hosts: localhost
  gather_facts: False

  tasks:     
  - name: Set init list
    set_fact:
      init_list:
       - 1
       - 2
       - 3

  - name: New list from with_items
    set_fact:
      new_list: "{{ new_list|default([]) + [ item ] }}"
    with_items: "{{ init_list }}"

  - debug:
      var: new_list

运行此简短脚本时,我得到以下输出:

TASK [Set init list] 
*************************************************************************
ok: [localhost]

TASK [New list from with_items] 
*************************************************************************
ok: [localhost] => (item=1)
ok: [localhost] => (item=2)
ok: [localhost] => (item=3)

TASK [debug] 
*************************************************************************
ok: [localhost] => {
    "new_list": [
        3
    ]
}

我希望new_list包含1,2,3。串联正在工作,但每次都覆盖。我确定以前是这样的(Ubuntu 16.04,不确定Ansible版本),我想知道这是否是Ansible版本问题。

# Ubuntu 18.04
# Ansible --version
ansible 2.5.1
  python version = 2.7.15rc1 (default, Nov 12 2018, 14:31:15) [GCC 7.3.0]

注意:我知道还有其他jinja2过滤器可能可以解决此问题,例如地图,列表等,但是它们在我的生产代码中并不容易应用。

1 个答案:

答案 0 :(得分:0)

我终于找到了正确的答案。这在Ansible 2.5.1版中被打破,不幸的是,这是Ubuntu 18.04中默认提供的版本。

当前最新版本(2.5.5)没有问题。

sudo -H pip install ansible == 2.5.5