gpt4 book ai didi

dictionary - 在 ansible playbook 中创建来自主机组的字典列表

转载 作者:行者123 更新时间:2023-12-01 10:35:15 25 4
gpt4 key购买 nike

我想动态创建一个字典列表,如下所示:

[ {'host': 'hostname1', 'id': 1}, {'host': 'hostname2', 'id': 2}, ]

并将其分配给我的剧本中的一个变量。

我正在使用的角色需要此变量。

我的尝试如下:
- hosts:
- some-hosts
vars:
zk_hosts: []
tasks:
- name: create my var
set_fact:
zk_hosts: "{{ zk_hosts + [ {'host': item.1, 'id': item.0} ] }}"
with_indexed_items: "{{ groups.some-hosts }}"

但是,当我运行剧本时,我收到了这个警告:
 [WARNING]: While constructing a mapping from stack.yml, line 16, column 3, found a duplicate dict key (vars).  Using last defined value only.

并且在这场比赛中出现错误:
fatal: [192.168.0.21]: FAILED! => {"failed": true, "msg": "ERROR! 'zk_hosts' is undefined"}

如果我不定义 zk_hosts在尝试设置事实之前,我收到一个错误,指出变量未定义。

我该如何解决?

编辑

简单修复,我刚刚定义了 zk_hosts在同一个任务中...
  tasks:
- name: create my var
vars:
zk_hosts: []
set_fact:
zk_hosts: "{{ zk_hosts + [ {'host': item.1, 'id': item.0} ] }}"
with_indexed_items: "{{ groups.some-hosts }}"

无论如何,如果有一个不那么麻烦的方法来实现相同的,请指教!

最佳答案

您可以使用默认过滤器:

set_fact:
zk_hosts: "{{ zk_hosts|default([]) + [ {'host': item.1, 'id': item.0} ] }}"
with_indexed_items: "{{ groups.some-hosts }}"

关于dictionary - 在 ansible playbook 中创建来自主机组的字典列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36681994/

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