Ansible 从文件中导入字典列表并遍历每个字典项

Ansible import list of dictionaries from a file and loop over each dictionary item

我有一个 pymongo 脚本,它生成如下所示的输出(字典列表),我正在存储一个文件 -

{'A': 'foo1', 'B': 'bar1', 'C': 'baz1'}
{'A': 'foo2', 'B': 'bar2', 'C': 'baz2'}
{'A': 'foo3', 'B': 'bar3', 'C': 'baz3'}

我想将此文件导入我的剧本并循环遍历每个项目。我应该如何处理这个问题?可以以某种方式使用查找吗?

给定词典列表

shell> cat data.yml
[{'A': 'foo1', 'B': 'bar1', 'C': 'baz1'},
 {'A': 'foo2', 'B': 'bar2', 'C': 'baz2'},
 {'A': 'foo3', 'B': 'bar3', 'C': 'baz3'}]

任务

    - set_fact:
        my_list: "{{ lookup('file', 'data.yml')|from_yaml }}"
    - debug:
        msg: "{{ item.A }} {{ item.B }} {{ item.C }}"
      loop: "{{ my_list }}"

给予

ok: [localhost] => (item={'A': 'foo1', 'B': 'bar1', 'C': 'baz1'}) =>
  msg: foo1 bar1 baz1
ok: [localhost] => (item={'A': 'foo2', 'B': 'bar2', 'C': 'baz2'}) =>
  msg: foo2 bar2 baz2
ok: [localhost] => (item={'A': 'foo3', 'B': 'bar3', 'C': 'baz3'}) =>
  msg: foo3 bar3 baz3

也可以使用数据

shell> cat data.yml
{'A': 'foo1', 'B': 'bar1', 'C': 'baz1'}
{'A': 'foo2', 'B': 'bar2', 'C': 'baz2'}
{'A': 'foo3', 'B': 'bar3', 'C': 'baz3'}

下面的任务将给出相同的结果

    - set_fact:
        my_list: "{{ lookup('file', 'data.yml').splitlines()|
                     map('from_yaml')|
                     list }}"
    - debug:
        msg: "{{ item.A }} {{ item.B }} {{ item.C }}"
      loop: "{{ my_list }}"