Ansible:将JSON值分配给变量
我正在使用一个定制的事实模块在Ansible 2.9中获取JSONAnsible:将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": {
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 }}"