用Ansible和_dict在字典列表上迭代

用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

我被困在反复翻阅字典列表中。示例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 }}"
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:
子句也没有多大意义