{
"vmware_dc": {
"changed": false,
"msg": "All items completed",
"results": [
{
"ansible_loop_var": "item",
"changed": false,
"datacenter_info": [
{
"config_status": "gray",
"moid": "datacenter-1146",
"name": "dc-1",
"overall_status": "gray"
}
],
"failed": false,
"invocation": {
"module_args": {
"datacenter": null,
"hostname": "vc-001",
"password": "VALUE_SPECIFIED_IN_NO_LOG_PARAMETER",
"port": 443,
"properties": null,
"proxy_host": null,
"proxy_port": null,
"schema": "summary",
"show_tag": false,
"username": "",
"validate_certs": false
}
},
"item": "vc-001"
},
{
"ansible_loop_var": "item",
"changed": false,
"datacenter_info": [
{
"config_status": "gray",
"moid": "datacenter-424",
"name": "dc-2",
"overall_status": "gray"
},
{
"config_status": "gray",
"moid": "datacenter-2",
"name": "dc-3",
"overall_status": "gray"
}
],
"failed": false,
"invocation": {
"module_args": {
"datacenter": null,
"hostname": "vc-002",
"password": "VALUE_SPECIFIED_IN_NO_LOG_PARAMETER",
"port": 443,
"properties": null,
"proxy_host": null,
"proxy_port": null,
"schema": "summary",
"show_tag": false,
"username": "",
"validate_certs": false
}
},
"item": "vc-002"
}
]
}}
请参阅上面的JSON结果。我希望有人能帮我。我应该采取两个字段,一个项目和datacenter_info.name,我可以得到单独的值。我不知道如何创建字典,因为我有2个条目和3个datacenter_info.name
enter - name: Set all_items
set_fact:
all_items: "{{ vmware_dc_info.results | flatten | map(attribute='item) | flatten }}"
- name: debug all_items
debug:
var: all_items
{
"all_items": [
"vc-001",
"vc-002"
]
- name: Set all dc
set_fact:
all_dc: "{{ vmware_dc_info.results | flatten | map(attribute='datacenter_info') | flatten | map(attribute='name') | flatten }}"
- name: debug all_dc
debug:
var: all_dc
"all_dc": [
"dc-1",
"dc-2",
"dc-3"字典应该如下所示
vc-001: dc-1
vc-002: dc-2
vc-002: dc-3有可能吗?你认为如何?
用下面的代码解析
- name: Set fact
set_fact:
dc_list: "{{ dc_list | default([]) + [{'vcenter': item[0].item, 'dc': item[1].name}] }}"
with_subelements:
- "{{ vmware_dc_info.results }}"
- datacenter_info
loop_control:
label: "{{ item[0].item }}"
- name: Debug
debug:
var: dc_list发布于 2022-03-04 07:33:22
例如
- set_fact:
hostnames: "{{ hostnames|d({})|combine({item: names}) }}"
loop: "{{ vmware_dc.results|map(attribute='item')|list }}"
vars:
_item: "{{ vmware_dc.results|selectattr('item', '==', item) }}"
names: "{{ _item.0.datacenter_info|map(attribute='name')|list }}"给出预期的结果。
hostnames:
vc-001:
- dc-1
vc-002:
- dc-2
- dc-3https://stackoverflow.com/questions/71343800
复制相似问题