我正在使用聚集事实变量来获取ansible_devices variable的大小。对于某些主机,我得到变量"ansible_devices": { "sda"
并且很少有服务器获得"ansible_devices": { "cciss!c0d0"
。
问题: - 当我使用ansible
变量{{ ansible_devices.sda.size }}
时,它的效果非常好。但是当我尝试从我的剧本中的{{ ansible_devices.cciss!c0d0.size }}
访问值时,它没有返回任何值,而在json ansible_devices
变量中,{{ ansible_devices.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_devices.cciss!c0d0.size }}
值?
答案 0 :(得分:1)
如果您使用的是javascript,还可以将JSON数据提取为:
ansible_devices["cciss!c0d0"]
它会在 cciss!c0d0 键下显示整个对象,然后你可以正常使用像size一样的inbuild函数。
所以尝试使用:
ansible_devices["cciss!c0d0"].size
答案 1 :(得分:0)
从边缘ansible_devices
使用hostvars[inventory_hostname]["ansible_devices"]
ansible变量,它会给我正确的值。我不知道这背后的确切原因是什么,但这是解决这个问题的诀窍。
{{ hostvars[inventory_hostname]["ansible_devices"]["cciss!c0d0"]["size"] }}
中获得此解决方案