ansible - 过滤 ansible JSON 输出
问题描述
我正在尝试从此 JSON 输出中提取特定的键/值
{
"result": {
"results": [
{
"changed": false,
"datacenter_info": [
{
"name": "DC_1",
"moid": "datacenter-2",
"config_status": "gray",
"overall_status": "gray"
}
],
"invocation": {
"module_args": {
"hostname": "vcenter_hostname_1",
"username": "XXXXX",
"password": "VALUE_SPECIFIED_IN_NO_LOG_PARAMETER",
"validate_certs": false
}
},
"ansible_facts": {
"discovered_interpreter_python": "/usr/libexec/platform-python"
},
"failed": false,
"item": "vcenter_hostname_1",
"ansible_loop_var": "item"
},
{
"changed": false,
"datacenter_info": [
{
"name": "DC_2_A",
"moid": "datacenter-2",
"config_status": "gray",
"overall_status": "gray"
},
{
"name": "DC_2_B",
"moid": "datacenter-3",
"config_status": "gray",
"overall_status": "gray"
},
{
"name": "DC_2_C",
"moid": "datacenter-3",
"config_status": "gray",
"overall_status": "gray"
}
],
"invocation": {
"module_args": {
"hostname": "vcenter_hostname_2",
"username": "XXXXX",
"password": "VALUE_SPECIFIED_IN_NO_LOG_PARAMETER",
"validate_certs": false
}
},
"failed": false,
"item": "vcenter_hostname_2",
"ansible_loop_var": "item"
}
],
"msg": "All items completed",
"changed": false
},
"_ansible_verbose_always": true,
"_ansible_no_log": false,
"changed": false
}
预期的输出是:
{
[
{
"datacenter_info": [
{
"name": "DC_1",
"moid": "datacenter-1",
"config_status": "gray",
"overall_status": "gray"
}
"vcenter": "vcenter_hostname_1",
},
{
"datacenter_info": [
{
"name": "DC_2_A",
"moid": "datacenter-2",
"config_status": "gray",
"overall_status": "gray"
},
{
"name": "DC_2_B",
"moid": "datacenter-3",
"config_status": "gray",
"overall_status": "gray"
},
{
"name": "DC_2_C",
"moid": "datacenter-4",
"config_status": "gray",
"overall_status": "gray"
}
],
"vcenter": "vcenter_hostname_2"
}
]
}
我试过:
- name: Append string to list
set_fact:
formatted: "{{ formatted + [ item.item ] + [ item.datacenter_info ] }}"
它非常接近,但我无法插入钥匙vcenter
并且我丢失了钥匙datacenter_info
。
解决方案
我不知道formatted
包含什么,但我相信您正在寻找的是:
- name: Append string to list
set_fact:
formatted: '{{ formatted + [{"vcenter": item.item, "datacenter_info": item.datacenter_info}] }}'
with_items: '{{ result.results }}'
推荐阅读
- r - 考虑到它们之间的相似性,将行分组
- javascript - How to filter an array of objects, based on some fields?
- css - Blazor 模板在侧边栏右侧绘制一条红线
- java - Firebase 身份验证电子邮件
- java - 使用 IN 对象列表将 Oracle SQL 查询转换为 Spring JPA
- .net - 如何在后台线程中正确分离 HttpContect?
- eclipse-hono - 通过 hono 将事件从边缘设备发送到同上
- r - 如何在数据框的一行中将字符串与向量的每个元素连接起来?
- html - 当有时另一个 div 出现在它上面时,如何隐藏它的第一个实例?
- javascript - 从 ChromeBrowser.RegisterAsyncJsObject 切换到 ChromeBrowser.JavascriptObjectRepository.Register 不允许我处理函数调用