关于从json中提取变量的问题

问题描述

我有以下 json 输出

我必须得到“持有人”(“VG_ROOT-var”、“VG_ROOT-root”、“VG_ROOT-tmp”) 来自所有 sd* 驱动器 *

尝试在 ansible 中使用类似的东西:

"gather_host_facts_result.ansible_facts.ansible_devices.sd*"

不幸的是,在这个阶段我已经遇到了问题。有人可以帮我吗?

如何在查询中指定“*”以转到结构的其余部分?

{
    "msg": [
        {
            "dm-0": {
                "holders": [],"host": "","links": {
                    "ids": [
                        "dm-name-VG_ROOT-root","dm-uuid-LVM-YMwN1WVoYYOwj8ZRJ5ZBdpMSlPTiiOAOgCughz5IwAC91ILXxeQEkJU4NnhDgfGf"
                    ],"labels": [],"masters": [],"uuids": [
                        "97c2a8ff-e21f-4869-9b0f-bbba523dc487"
                    ]
                },"model": null,"partitions": {},"removable": "0","rotational": "1","sas_address": null,"sas_device_handle": null,"scheduler_mode": "","sectors": "123723776","sectorsize": "512","size": "59.00 GB","support_discard": "0","vendor": null,"virtual": 1
            },"dm-1": {
                "holders": [],"links": {
                    "ids": [
                        "dm-name-VG_DATA-data","dm-uuid-LVM-htvEwSfXRtyxN1j7V4A2BSdeKJGBTLqiPBERZVCP8ZOr4uMWSmopoedAQvSZ4gXJ"
                    ],"uuids": [
                        "4c4c89ab-df3f-4647-aa37-c04c9175b804"
                    ]
                },"sectors": "62906368","size": "30.00 GB","dm-2": {
                "holders": [],"links": {
                    "ids": [
                        "dm-name-VG_SWAP-swap","dm-uuid-LVM-SHCF191xu9CcjovlxavjqUXI1yBmVdLTxbd24kHS8fkcAlDkbMcXlAlsY7m0soMF"
                    ],"uuids": [
                        "97999edf-ccb5-45c8-87c6-23d2a5771146"
                    ]
                },"sectors": "20963328","size": "10.00 GB","dm-3": {
                "holders": [],"links": {
                    "ids": [
                        "dm-name-VG_ROOT-tmp","dm-uuid-LVM-YMwN1WVoYYOwj8ZRJ5ZBdpMSlPTiiOAOqId09qrO6vwn9z7306ZkWhRyiXS4d1jy"
                    ],"uuids": [
                        "325d6523-4e1f-4352-ab39-1e7259b613c5"
                    ]
                },"sectors": "20971520","dm-4": {
                "holders": [],"links": {
                    "ids": [
                        "dm-name-VG_ROOT-var","dm-uuid-LVM-YMwN1WVoYYOwj8ZRJ5ZBdpMSlPTiiOAOTz6mFIEVsHJN4B0hOAV0RlVdmm293Z0L"
                    ],"uuids": [
                        "41f5cd6a-fa50-4ac3-a14d-693d23a3df87"
                    ]
                },"sda": {
                "holders": [],"host": "Serial Attached SCSI controller: VMware PVSCSI SCSI Controller (rev 02)","links": {
                    "ids": [],"uuids": []
                },"model": "Virtual disk","partitions": {
                    "sda1": {
                        "holders": [],"links": {
                            "ids": [],"uuids": [
                                "3C14-A798"
                            ]
                        },"sectors": "2097152","sectorsize": 512,"size": "1.00 GB","start": "2048","uuid": "3C14-A798"
                    },"sda2": {
                        "holders": [
                            "VG_ROOT-var","VG_ROOT-root","VG_ROOT-tmp"
                        ],"links": {
                            "ids": [
                                "lvm-pv-uuid-9Mm0hj-z0vg-WEhd-7MyB-xcp1-mEI3-XZENN8"
                            ],"masters": [
                                "dm-0","dm-3","dm-4"
                            ],"uuids": []
                        },"sectors": "165672927","size": "79.00 GB","start": "2099200","uuid": null
                    }
                },"scheduler_mode": "bfq","sectors": "167772160","size": "80.00 GB","vendor": "VMware","sdb": {
                "holders": [
                    "VG_SWAP-swap"
                ],"links": {
                    "ids": [
                        "lvm-pv-uuid-m2YPQe-ofBp-AjUa-qAfQ-Bcy6-xTpj-WyNFU1"
                    ],"masters": [
                        "dm-2"
                    ],"sdc": {
                "holders": [
                    "VG_DATA-data"
                ],"links": {
                    "ids": [
                        "lvm-pv-uuid-X47VTO-03iG-WVw4-ww8p-PH0v-hlGj-wU1t7F"
                    ],"masters": [
                        "dm-1"
                    ],"sectors": "62914560","sr0": {
                "holders": [],"host": "IDE interface: Intel Corporation 82371AB/EB/MB PIIX4 IDE (rev 01)","links": {
                    "ids": [
                        "ata-VMware_Virtual_IDE_CDROM_Drive_10000000000000000001"
                    ],"model": "VMware IDE CDR10","removable": "1","sectors": "2097151","size": "1024.00 MB","vendor": "NECVMWar","virtual": 1
            }
        }
    ]
}

解决方法

我创建了这样的东西:

- name: disks
  hosts: localhost
  become: false
  gather_facts: false
  tasks:
  - name: hardware
    setup:
      gather_subset:
      - hardware
    register: gather_host_facts_result


  - name: The output 
    debug:
      msg:
        - "{{ gather_host_facts_result.devices | dict2items | selectattr('key','match','^sd.*') | map(attribute='value.holders') | flatten }}"

但这行不通。

我想从所有 sd * 磁盘中提取所有持有者,例如 VG ROOT-var、VG _ROOT-rootVG _ROOT-tmp。 输出应如下所示: sda2: "VG_ROOT-var","VG_ROOT-root","VG_ROOT-tmp"

sdc “VG_DATA-数据” 数据表 “VG_SWAP-交换”