我被困在迭代字典列表中。示例vars.yml和最小的剧本如下。
---
- hosts: localhost
connection: local
gather_facts: false
become: false
vars:
csvfile: "{{ lookup('file', 'vars/users.csv') }}"
tasks:
- name: Convert CSV to YAML
template:
src: "./users_csv.j2"
dest: "vars/users.yml"
run_once: true
- name: Include users from users.yml to users variable
include_vars:
file: vars/users.yml
name: users
- debug:
msg: "{{ users.value }}"
with_dict:
- "{{ users }}"
我的Jinja2模板以YAML格式生成字典列表,如下所示:
--
users:
- username: Auser1
group: Admin
- username: Auser2
group: Admin
- username: Auser3
group: User
无论如何,当我迭代字典时,我无法获得例如用户名或组。
到目前为止,我得到的是一条致命的错误消息:
fatal: [localhost]: FAILED! => {"msg": "with_dict expects a dict"}
我知道如何遍历列表,但我不知道为什么它在这里失败了。
答案 0 :(得分:2)
users
不是字典,而是字典的列表变量。
如果要在循环中解析此变量,可以使用:
- debug:
msg: "username: {{ item.username }}, group: {{ item.group }}"
with_items:
- "{{ users.users }}"
希望有所帮助
<强>更新强>
我现在注意到,当包含var文件时,您也会传递name: users
指令。这会导致文件的所有变量都放在users
变量下。因此,要引用变量文件中定义的users
列表,您需要使用users.users
。
将with_items
更新为:
with_items:
- "{{ users.users }}"