我正在使用收集事实变量来获取有关主机的大小信息。对于某些服务器,我得到变量"ansible_devices": { "sda"
并且很少有服务器获得"ansible_devices": { "cciss!c0d0"
。
问题: - 当我在我的剧本中使用变量{{ ansible_devices.sda.size }}
并且在sda
变量中找不到ansible_device
键时,显然它会给我错误< / p>
fatal: [xyz101] =>One or more undefined variables: dict object has no element sda
在ansible_device
variable中获取价值,如下所示
"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键中的特殊字符可能就是我无法获取其值的原因。
有没有办法通过密钥索引{{ ansible_devices[0].size }}
访问此变量?
或任何其他更好的方式来访问它。
答案 0 :(得分:0)
您可以使用条件?
when: ansible_devices.sda exists
或者您可以遍历ansible_devices.keys()和with_items。
答案 1 :(得分:0)
我们可以在下面的ansible playbook中使用has_key
来检查密钥。
when: ansible_devices.has_key('sda')
以上检查解决了我的胎儿错误,因为我为这两个键添加了两个任务。但我仍然在寻找解决方案,我可以通过索引号获得这些关键值。它将多个条件替换为一个。