我使用收集事实变量来获取有关主机的大小信息。对于某些服务器,我得到变量"ansible_devices": { "sda"
,对于少数服务器,我得到变量"ansible_devices": { "cciss!c0d0"
。
问题:-当我在剧本中使用变量{{ ansible_devices.sda.size }}
时,如果sda
键在ansible_device
变量中未找到,那么显然它会给我错误
fatal: [xyz101] =>One or more undefined variables: dict object has no element sda
获取ansible_device
变量的值
"ansible_devices": {
"sda": {
"size": "68.33 GB",
........
}
},
"item": ""
或
"ansible_devices": {
"cciss!c0d0": {
"size": "68.33 GB",
........
}
},
"item": ""
我也可以访问大小在这里使用{{ ansible_devices.sda.size }}
在第一种情况下,但无法在{{ ansible_devices.cciss!c0d0.size }}
在第二种情况下获取值。
它可能是json键中的case特殊字符,这就是为什么我无法获取其值。
是否有办法通过键索引{{ ansible_devices[0].size }}
访问这个变量?或者其他更好的方法。
你可以使用条件?
when: ansible_devices.sda exists
或者您可以遍历ansible_devices.keys()和with_items.
我们可以使用has_key
来检查key,如下图所示。
when: ansible_devices.has_key('sda')
以上检查解决了我的胎儿错误,因为我为这两个键添加了两个任务。但我仍然在寻找解决方案,我可以得到这些键值通过索引号。它将多个条件替换为一个。