gpt4 book ai didi

Ansible - 使用带有 with_items 的 set_fact 模块时如何继续将新键附加到字典中?

转载 作者:行者123 更新时间:2023-12-03 13:48:37 27 4
gpt4 key购买 nike

将 set_fact 与 with_items 一起使用时,我想将键添加到字典中。这是一个小的 POC,它将帮助我完成一些其他工作。我试图概括 POC,以便从中删除所有不相关的细节。

当我执行以下代码时,它会显示一个字典,其中只有一个键对应于 with_items 的最后一项。它似乎正在重新创建一个新字典,或者可能正在为 with_items 中的每个项目覆盖现有字典。我想要一个包含所有键的字典。

代码:

---
- hosts: localhost
connection: local
vars:
some_value: 12345
dict: {}
tasks:
- set_fact: {
dict: "{
{{ item }}: {{ some_value }}
}"
}
with_items:
- 1
- 2
- 3
- debug: msg="{{ dict }}"

最佳答案

这也可以在不借助插件的情况下完成,在 Ansible 2.2 中进行了测试。

---
- hosts: localhost
connection: local
vars:
some_value: 12345
dict: {}
tasks:
- set_fact:
dict: "{{ dict | combine( { item: some_value } ) }}"
with_items:
- 1
- 2
- 3
- debug: msg="{{ dict }}"
或者,这可以在没有包含文件的复杂单行代码的情况下编写。
  tasks:
- include: append_dict.yml
with_items: [1, 2, 3]
append_dict.yml:
- name: "Append dict: define helper variable"
set_fact:
_append_dict: "{ '{{ item }}': {{ some_value }} }"

- name: "Append dict: execute append"
set_fact:
dict: "{{ dict | combine( _append_dict ) }}"
输出:
TASK [debug]
*******************************************************************
ok: [localhost] => {
"msg": {
"1": "12345",
"2": "12345",
"3": "12345"
}
}
单引号 '{{ some_value }}需要显式存储字符串值。
此语法还可用于从 dict 追加逐元素使用 with_dict引用 item.keyitem.value .
例如,可以在同一步骤中执行诸如添加前缀和后缀或哈希之类的操作
    set_fact:
dict: "{{ dict | combine( { item.key + key_postfix: item.value + '_' + item.value | hash('md5') } ) }}"

关于Ansible - 使用带有 with_items 的 set_fact 模块时如何继续将新键附加到字典中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31772732/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com