Ansible:将JSON值分配给变量

Ansible:将JSON值分配给变量,json,ansible,Json,Ansible,我正在使用一个定制的事实模块在Ansible 2.9中获取JSON ok: [Host] => { "msg": { "changed": false, "failed": false, "msg": "Successfully completed the view storage volume operation", "storage_status": { "Message": {

我正在使用一个定制的事实模块在Ansible 2.9中获取JSON

ok: [Host] => {
    "msg": {
        "changed": false,
        "failed": false,
        "msg": "Successfully completed the view storage volume operation",
        "storage_status": {
            "Message": {
                "Controller": {
                    "AHCI.Embedded.3-1": {},
                    "RAID.Integrated.1-1": {
                        "Enclosure": {
                            "Enclosure.Internal.0-1:RAID.Integrated.1-1": {
                                "PhysicalDisk": [
                                    "Disk.Bay.0:Enclosure.Internal.0-1:RAID.Integrated.1-1",
                                    "Disk.Bay.1:Enclosure.Internal.0-1:RAID.Integrated.1-1"
                                ]
                            }
                        },
                        "VirtualDisk": {
                            "Disk.Virtual.0:RAID.Integrated.1-1": {
                                "PhysicalDisk": [
                                    "Disk.Bay.0:Enclosure.Internal.0-1:RAID.Integrated.1-1",
                                    "Disk.Bay.1:Enclosure.Internal.0-1:RAID.Integrated.1-1"
                                ]
                            }
                        }
                    }
                }
            },
            "Status": "Success"
        }
    }
}
我想使用set_事实模块将Disk.Virtual.0:RAID.Integrated.1-1值分配给一个变量。使用以下过滤器:

{{ disks['storage_status']['Message']['Controller']['RAID.Integrated.1-1']['VirtualDisk'] }}
我只能选择以下选项:

ok : [Host] => {
        "msg": {
            "Disk.Virtual.0:RAID.Integrated.1-1": {
                "PhysicalDisk": [
                    "Disk.Bay.0:Enclosure.Internal.0-1:RAID.Integrated.1-1",
                    "Disk.Bay.1:Enclosure.Internal.0-1:RAID.Integrated.1-1"
                ]
            }
        }
    }
但我无法确定如何获取Disk.Virtual.0:RAID.Integrated.1-1并将其分配给变量

任何帮助/指导都将不胜感激

谢谢使用dict lookup with.key:

给出:

TASK [debug] *****************************************
ok: [localhost] => {
    "msg": "Disk.Virtual.0:RAID.Integrated.1-1"
}
要将my_var分配给变量,请使用set_fact:


非常感谢你,杰克。我试图将这个答案标记为解决方案,但由于我的声誉,我无法这样做。除了您已经回答的问题外,我还想问一下如何将原始json中的RAID.Integrated.1-1分配给变量?多谢各位,我的意思是问您如何将密钥RAID.Integrated.1-1分配给一个单独的变量。我知道并熟悉set_事实模块,但我想知道RAID.Integrated.1-1的查询和分配。再次感谢您通过regex_replace过滤器运行它:{{…| regex_replace'^..*:',}}}非常抱歉不断澄清并询问您。。但是我想获取dict对象ok:[Host]=>{msg:{更改:false,失败:false,msg:成功完成了查看存储卷操作,存储状态:{Message:{Controller:{AHCI.Embedded.3-1:{},This->>RAID.Integrated.1-1:如果不使用regex_replace,那么我真的不明白您希望将JSON对象的哪一部分分配给变量。
TASK [debug] *****************************************
ok: [localhost] => {
    "msg": "Disk.Virtual.0:RAID.Integrated.1-1"
}
  - set_fact:
      my_var: "{{ lookup('dict', disks['storage_status']['Message']['Controller']['RAID.Integrated.1-1']['VirtualDisk']).key }}"