我正在從 VMware 資料存盤集合中生成卷及其關聯標簽的串列
我將它們格式化為 JSON 型別的輸出,以便稍后提供給另一個系統。輸出正在作業,但對于標簽部分,我只想保留 name 和 category_name 而不是其他屬性。
這是我的劇本:
---
- name: Fetching Datastores
hosts: localhost
tasks:
- name: Gather info from datacenter about specific datastore
community.vmware.vmware_datastore_info:
hostname: 'myesxiHost'
username: 'administrator'
password: 'Password'
validate_certs: False
show_tag: true
delegate_to: localhost
register: ds_info
- set_fact:
ds_info_eph: "{{ ds_info_eph|default([]) [ {
'name': item.name,
'type': item.type,
'capacity': item.capacity,
'tag': item.tags
} ] }}"
loop: "{{ ds_info.datastores }}"
- name: Output info
debug:
msg: "{{ ds_info_eph }}"
這個劇本給了我以下輸出:
ok: [localhost] => {
"msg": [
{
"capacity": 499826819072,
"name": "ESX01_SSD4",
"tag": [
{
"category_id": "urn:vmomi:InventoryServiceCategory:017ad796-b931-4f5b-bd4a-8fee7adaf124:GLOBAL",
"category_name": "Tier",
"description": "",
"id": "urn:vmomi:InventoryServiceTag:6112eeac-ed81-48d4-b7d9-81084b8a415a:GLOBAL",
"name": "Gold"
}
],
"type": "VMFS"
},
{
"capacity": 499826819072,
"name": "ESX01_SSD3",
"tag": [
{
"category_id": "urn:vmomi:InventoryServiceCategory:017ad796-b931-4f5b-bd4a-8fee7adaf124:GLOBAL",
"category_name": "Tier",
"description": "",
"id": "urn:vmomi:InventoryServiceTag:6112eeac-ed81-48d4-b7d9-81084b8a415a:GLOBAL",
"name": "Gold"
}
],
"type": "VMFS"
},
{
"capacity": 499826819072,
"name": "ESX01_SSD5",
"tag": [
{
"category_id": "urn:vmomi:InventoryServiceCategory:017ad796-b931-4f5b-bd4a-8fee7adaf124:GLOBAL",
"category_name": "Tier",
"description": "",
"id": "urn:vmomi:InventoryServiceTag:6112eeac-ed81-48d4-b7d9-81084b8a415a:GLOBAL",
"name": "Gold"
}
],
"type": "VMFS"
},
{
"capacity": 239981297664,
"name": "ESX01_SSD2",
"tag": [
{
"category_id": "urn:vmomi:InventoryServiceCategory:017ad796-b931-4f5b-bd4a-8fee7adaf124:GLOBAL",
"category_name": "Tier",
"description": "",
"id": "urn:vmomi:InventoryServiceTag:6112eeac-ed81-48d4-b7d9-81084b8a415a:GLOBAL",
"name": "Gold"
}
],
"type": "VMFS"
},
{
"capacity": 248034361344,
"name": "ESX01_SSD1",
"tag": [
{
"category_id": "urn:vmomi:InventoryServiceCategory:017ad796-b931-4f5b-bd4a-8fee7adaf124:GLOBAL",
"category_name": "Tier",
"description": "",
"id": "urn:vmomi:InventoryServiceTag:6112eeac-ed81-48d4-b7d9-81084b8a415a:GLOBAL",
"name": "Gold"
}
],
"type": "VMFS"
}
]
}
相反,我想要這個輸出:
ok: [localhost] => {
"msg": [
{
"capacity": 499826819072,
"name": "ESX01_SSD4",
"tag": [
{
"category_name": "Tier",
"name": "Gold"
}
],
"type": "VMFS"
},
{
"capacity": 499826819072,
"name": "ESX01_SSD3",
"tag": [
{
"category_name": "Tier",
"name": "Gold"
}
],
"type": "VMFS"
},
{
"capacity": 499826819072,
"name": "ESX01_SSD5",
"tag": [
{
"category_name": "Tier",
"name": "Gold"
}
],
"type": "VMFS"
},
{
"capacity": 239981297664,
"name": "ESX01_SSD2",
"tag": [
{
"category_name": "Tier",
"name": "Gold"
}
],
"type": "VMFS"
},
{
"capacity": 248034361344,
"name": "ESX01_SSD1",
"tag": [
{
"category_name": "Tier",
"name": "Gold"
}
],
"type": "VMFS"
}
]
}
但是在標簽部分,我嘗試在劇本中執行以下操作以僅獲取名稱而不是所有標簽項串列:'tag': item.tags.name但我遇到了以下致命錯誤:[localhost]: FAILED! => {"msg": "Unexpected templating type error occurred on ({{ ds_info_eph|default([]) [ { 'name': item.name, 'type': item.type, 'capacity': item.capacity, 'tag': item.tags.name } ] }}): can only concatenate str (not \"list\") to str"}
我的理解是在 set_fac 中,我必須再次回圈才能僅獲取標簽名稱和標簽 category_name,但我不知道如何操作。
謝謝您的幫助 !
uj5u.com熱心網友回復:
從標簽串列中選擇屬性,例如
- set_fact:
_tags: "{{ ds_info_eph|
map(attribute='tag')|
map('items2dict', 'category_name', 'name')}}"
給
_tags:
- Tier: Gold
- Tier: Gold
- Tier: Gold
- Tier: Gold
- Tier: Gold
結合字典
- set_fact:
result: "{{ result|d([]) [item.0|combine({'tag': item.1})] }}"
with_together:
- "{{ ds_info_eph }}"
- "{{ _tags|map('dict2items', 'category_name', 'name') }}"
給
result:
- capacity: 499826819072
name: ESX01_SSD4
tag:
category_name: Tier
name: Gold
type: VMFS
- capacity: 499826819072
name: ESX01_SSD3
tag:
category_name: Tier
name: Gold
type: VMFS
- capacity: 499826819072
name: ESX01_SSD5
tag:
category_name: Tier
name: Gold
type: VMFS
- capacity: 239981297664
name: ESX01_SSD2
tag:
category_name: Tier
name: Gold
type: VMFS
- capacity: 248034361344
name: ESX01_SSD1
tag:
category_name: Tier
name: Gold
type: VMFS
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/382219.html
上一篇:顫動串列視圖覆寫最后一項
