我试图为数组列表中的每个项提取vs_name
的值,但看起来我做错了什么,但无法解决。
这是我想要解析的输出
ok: [localhost] => {
"msg": {
"AV-FAS": {
"vs_name": "AV-FAS",
"vs_type": "admin"
},
"AV-FAS-01": {
"vs_name": "AV-FAS-01",
"vs_type": "node"
},
"AV-FAS-02": {
"vs_name": "AV-FAS-02",
"vs_type": "node"
}
这是我的代码:
- name: populate vs list
set_fact:
vs_list: "{{ vs_list|default([]) }} + [ '{{ item.vs_name }}' ]"
with_items: "{{ output }}"
Q:">提取vs_name的值">
A: 使用过滤器json_query。例如
- set_fact:
vs_list: "{{ output|json_query('*.vs_name') }}"
给出
"vs_list": [
"AV-FAS",
"AV-FAS-01",
"AV-FAS-02"
]
下一个选项是属性的映射。需要过滤器dict2items将字典转换为列表。例如,下面的任务给出了相同的结果
- set_fact:
vs_list: "{{ output|dict2items|
map(attribute='value.vs_name')|
list }}"
Q:">当vs_type='admin'时列出vs_name">
A: 将过滤器selectattr添加到管道中。例如
- set_fact:
vs_list: "{{ output|dict2items|
selectattr('value.vs_type', 'eq', 'admin')|
map(attribute='value.vs_name')|
list }}"
给出
"vs_list": [
"AV-FAS"
]