Vin*_*Pii 4 dictionary ansible
我想动态创建一个字典列表,如下所示:
[ {'host': 'hostname1', 'id': 1}, {'host': 'hostname2', 'id': 2}, ]
Run Code Online (Sandbox Code Playgroud)
并将其分配给我的剧本中的一个变量。
我正在使用的角色需要此变量。
我的尝试如下:
- 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 }}"
Run Code Online (Sandbox Code Playgroud)
但是,当我运行剧本时,我收到了这个警告:
[WARNING]: While constructing a mapping from stack.yml, line 16, column 3, found a duplicate dict key (vars). Using last defined value only.
Run Code Online (Sandbox Code Playgroud)
并且在这场比赛中出现错误:
fatal: [192.168.0.21]: FAILED! => {"failed": true, "msg": "ERROR! 'zk_hosts' is undefined"}
Run Code Online (Sandbox Code Playgroud)
如果我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 }}"
Run Code Online (Sandbox Code Playgroud)
无论如何,如果有一个不那么麻烦的方法来实现相同的,请指教!
小智 6
您可以使用默认过滤器:
set_fact:
zk_hosts: "{{ zk_hosts|default([]) + [ {'host': item.1, 'id': item.0} ] }}"
with_indexed_items: "{{ groups.some-hosts }}"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6103 次 |
| 最近记录: |