ansible - Ansible jinja2 未使用 with_items 连接到列表
问题描述
为什么 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 过滤器可能会解决这个问题,例如地图、列表等,但它们在我的生产代码中并不容易应用。
解决方案
我终于找到了正确的答案。这在 Ansible 版本 2.5.1 中被破坏了,不幸的是,这是 Ubuntu 18.04 中默认提供的版本。
当前最新的(2.5.5)没有这个问题。
sudo -H pip install ansible==2.5.5
推荐阅读
- c# - Azure - 无法在现有服务计划上创建新的 Web 应用程序
- powershell - 使用 Powershell 将计算机从 csv 文件移动到正确的 OU
- python - 将属性传递给基本 celery 任务的最佳实践
- azure - 如何在 Kusto 中将秒转换为 HH:mm:ss 格式
- python - 如何在列表中只有一项的情况下解决字典类型错误的 Python 列表?
- r - 读取 csv 文件:有些值包含“E”,R 将其读取为数字
- algorithm - 获取没有控制位的原始汉明字
- android - RoomProcessor 编译或循环依赖
- apache-spark - 如何从完整数据集中默认获取最近 3 个月的数据
- c# - 如何在 System.Web.UI.Page 中解决相同类型的多个依赖项,其中这些依赖项实现通用接口