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 }}"
我有一个 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 }}"