用Ansible和_dict在字典列表上迭代
我被困在反复翻阅字典列表中。示例vars.yml和最小剧本如下用Ansible和_dict在字典列表上迭代,ansible,yaml,Ansible,Yaml,我被困在反复翻阅字典列表中。示例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: "./us
---
- 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 }}"
My Jinja2模板生成YAML格式的词典列表,如下所示:
--
users:
- username: Auser1
group: Admin
- username: Auser2
group: Admin
- username: Auser3
group: User
无论如何,当我迭代字典时,我无法获得例如用户名或组
我得到的最多的信息是一条致命的错误消息,上面说:
fatal: [localhost]: FAILED! => {"msg": "with_dict expects a dict"}
我知道如何迭代列表,但我不知道为什么它在这里失败 用户不是字典,而是字典的列表变量 如果要在循环中解析此变量,可以使用:
- debug:
msg: "username: {{ item.username }}, group: {{ item.group }}"
with_items:
- "{{ users.users }}"
希望能有帮助
更新
现在我注意到,在包含var文件时,您还传递了name:users
指令。这将导致文件的所有变量都放在users
变量下。因此,要引用变量文件中定义的users
列表,需要使用users.users
使用_项将更新为:
with_items:
- "{{ users.users }}"
这就是我最初尝试的。尽管如此,它仍然会失败,并出现致命错误:[localhost]:失败!=>{“msg”:"该任务包含一个带有未定义变量的选项。错误是:“dict object”没有“username”属性\n\n哦,我注意到我以前忽略了一些东西。请检查更新的回答哦,你是对的。我确信我没有使用名称:before,或者更准确地说,我已经直接访问了vars文件。也许你是在我们访问时添加的重新测试?如果您在该var文件中没有其他变量,那么添加name:
子句也没有多大意义