【发布时间】:2018-04-23 14:06:18
【问题描述】:
以这个剧本为例:
---
- hosts: localhost
gather_facts: no
vars:
in_list:
- value1
- value2
- value3
final_list: []
tasks:
- debug:
var: in_list
- name: parse list
set_fact:
final_list: "{{ final_list + [{'key': item}] }}"
with_items: "{{ in_list }}"
- debug:
var: final_list
似乎final_list 在每次迭代中都被最后一次 set_fact 替换所替换,即它没有在每个循环中附加到它。
输出:
[root@optima-ansible ILIAS]# ansible-playbook append_to_list.yml
PLAY [localhost] ****************************************************************************************************************************************************************************************************
TASK [debug] ********************************************************************************************************************************************************************************************************
ok: [localhost] => {
"in_list": [
"value1",
"value2",
"value3"
]
}
TASK [parse list] ***************************************************************************************************************************************************************************************************
ok: [localhost] => (item=value1)
ok: [localhost] => (item=value2)
ok: [localhost] => (item=value3)
TASK [debug] ********************************************************************************************************************************************************************************************************
ok: [localhost] => {
"final_list": [
{
"key": "value3"
}
]
}
PLAY RECAP **********************************************************************************************************************************************************************************************************
localhost : ok=3 changed=0 unreachable=0 failed=0
[root@optima-ansible ILIAS]#
我使用了来自question的代码
我做错了什么?
更新:我的设置:
[root@optima-ansible ILIAS]# ansible --version
ransible 2.5.1
config file = /etc/ansible/ansible.cfg
configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
ansible python module location = /usr/lib/python2.7/site-packages/ansible
executable location = /usr/bin/ansible
python version = 2.7.14 (default, Mar 14 2018, 13:36:31) [GCC 7.3.1 20180303 (Red Hat 7.3.1-5)]
[root@optima-ansible ILIAS]# rpm -qa --last | grep ansible
ansible-2.5.1-1.fc27.noarch Sun 22 Apr 2018 02:46:30 AM EEST
[root@optima-ansible ILIAS]#
【问题讨论】:
-
即使来自this tutorial的代码在我的ansible中也不起作用,如页面所示,请随意尝试
append_dict_v2.yml -
你的意思是我的 ansible 安装的错误?我正在使用与 fedora 一起发布的版本,它的 2.5.1 增加了问题以提高可见性
-
然后在 GitHub 上发布一个问题,因为除了 2.5.1 之外的所有其他版本都会产生您预期的结果。
-
你是对的。使用 ansible-2.5.0-1.el7.ans.noarch.rpm 代码按预期工作。并且它不是分发问题,使用来自here 的 2.5.1 可以重现该问题。我想我会打开问题并降级 ansible 以继续我的工作:) 谢谢
-
我在 2.5.1 中遇到了同样的问题;更新到最新解决它
标签: ansible