Json 如果键中有特殊字符,则无法从ansible_devices变量获取值
我使用gather事实变量从中获取大小。对于某些主机,我得到变量Json 如果键中有特殊字符,则无法从ansible_devices变量获取值,json,ansible,ansible-playbook,Json,Ansible,Ansible Playbook,我使用gather事实变量从中获取大小。对于某些主机,我得到变量“ansible\u设备”:{“sda”,对于少数服务器,我得到“ansible\u设备”:{“cciss!c0d0” 问题:-当我使用ansible变量{{ansible\u devices.sda.size}}时,它工作得很好。但是当我试图从{ansible\u devices.cciss!c0d0.size}访问值时在我的剧本中,它不返回任何值,而在jsonansible\u设备变量中,{{ansible\u设备.cciss!
“ansible\u设备”:{“sda”
,对于少数服务器,我得到“ansible\u设备”:{“cciss!c0d0”
问题:-当我使用ansible
变量{{ansible\u devices.sda.size}}
时,它工作得很好。但是当我试图从{ansible\u devices.cciss!c0d0.size}访问值时
在我的剧本中,它不返回任何值,而在jsonansible\u设备
变量中,{{ansible\u设备.cciss!c0d0.size}
存在值
{
"ansible_devices": {
"cciss!c0d0": {
"holders": [],
"host": "RAID bus controller: Hewlett-Packard Company Smart Array Controller (rev 03)",
"model": "LOGICAL VOLUME",
"partitions": {},
"removable": "0",
"rotational": "1",
"scheduler_mode": "cfq",
"sectors": "143299800",
"sectorsize": "512",
"size": "68.33 GB",
"support_discard": "0",
"vendor": "HP"
}
},
"item": ""
}
它可能是ansible
变量json键中的大小写特殊字符,这就是我无法获取其值的原因。有人能建议我如何访问这里的
{{ansible\u devices.cciss!c0d0.size}
值吗?如果您使用的是javascript,还可以通过以下方式获取JSON数据:
ansible_devices["cciss!c0d0"]
它将在cciss!c0d0键下显示整个对象,然后您通常可以使用内置函数,如大小
因此,尝试使用:
ansible_devices["cciss!c0d0"].size
使用
ansible\u devices
ansible变量从其边缘hostvars[inventory\u hostname][“ansible\u devices”]
然后它会给我正确的值。我不知道这背后的确切原因是什么,但这是解决这个问题的诀窍
{{ hostvars[inventory_hostname]["ansible_devices"]["cciss!c0d0"]["size"] }}
我在中得到了这个解决方案,这个问题与JavaScript无关。不过,你有没有尝试过这个解决方案,而且你从来没有提到过任何需要解析数据的语言。请在对其他答案进行否决之前编辑你的问题。我没有对sumit进行否决。因为我在这个问题中添加了
ansible
标记,所以这是一个显而易见的问题与ansible相关。我在ansible剧本中也提到了我面临的这个问题。