ansible - 嵌套字典列表中的ansible访问键
问题描述
我正在尝试使用循环来检索多个列表嵌套字典中存在的多个值。不幸的是,除非我明确定义要抓取的列表,否则我似乎无法这样做。由于我打算定义数百个这样的设备,我希望有一些可以更好地扩展的东西。
#playbook.yml
tasks:
- name: Get volume details using name
get_storage_volume:
host: "{{ host }}"
username: "{{ username }}"
password: "{{ password }}"
name: "{{ inventory_hostname }}-{{ item.volsuffix }}"
state: "present"
register: volume_results
loop: "{{ volumes }}"
volumes:
- volsuffix: data1
volsize: 100
mount_path: /data/fs1
fstype: xfs
mount_opts: noatime
storage_protocol: fc
- volsuffix: data2
volsize: 100
mount_path: /data/fs2
fstype: xfs
mount_opts: noatime,_netdev
storage_protocol: iscsi
- debug:
msg: "{{ volume_results.results.0.attrs.serial_number }}"
#msg: "{{ volume_results.results.1.attrs.serial_number }}"
我想避免显式调用列表条目 [0] 和 [1],如下所示:
TASK [debug] *********************************************************************************************************************************************************************************************************************************************************************************************************************
ok: [node1] => {
"msg": "abcdef12345"
}
ok: [node2] => {
"msg": "cvbnm46807"
}
下面是我输出所有 "{{ volume_results.result }}" 时的数据格式:
TASK [debug] *******************************************************************
ok: [node1] => {
"volume_results.results": [
{
"ansible_loop_var": "item",
"attrs": {
"agent_type": "none",
"name": "node1-data1",
"serial_number": "abcdef12345",
"warn_level": 0
},
},
{
"ansible_loop_var": "item",
"attrs": {
"agent_type": "none",
"name": "node1-data2",
"serial_number": "987654qwert",
"warn_level": 0
}
}
]
}
ok: [node2] => {
"volume_results.results": [
{
"ansible_loop_var": "item",
"attrs": {
"agent_type": "none",
"name": "node2-data1",
"serial_number": "cvbnm46807",
"warn_level": 0
},
},
{
"ansible_loop_var": "item",
"attrs": {
"agent_type": "none",
"name": "node2-data2",
"serial_number": "asdfg56789",
"warn_level": 0
}
}
]
}
想法?
解决方案
要么使用map,例如
- debug:
msg: "{{ volume_results.results|
map(attribute='attrs.serial_number')|list }}"
, 或json_query , 例如
- debug:
msg: "{{ volume_results.results|
json_query('[].attrs.serial_number') }}"
推荐阅读
- javascript - 从按钮动态获取模式中的数据属性
- java - 我们如何在java中从一个目录向上移动到另一个目录?
- flutter - Flutter initState 被多次调用
- c# - 在 EF Core 3.1 中执行带有可选返回列的存储过程
- python - 如何从 Django 用户模型中调用自定义数据
- node.js - 节点js删除代码产生的意外错误
- javascript - 类型错误:ping 不是函数
- javascript - 使用 onload 在 React 中欢迎加载程序问题
- flutter - Flutter Material Icons 在网页上呈现随机图标
- java - 如何编写此递归的输出而不每次都覆盖 .txt 文件?