通过ansible聚集事实变量的索引号访问值

时间:2014-06-20 05:57:06

标签: ansible ansible-playbook

我正在使用收集事实变量来获取有关主机的大小信息。对于某些服务器,我得到变量"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 }}访问此变量? 或任何其他更好的方式来访问它。

2 个答案:

答案 0 :(得分:0)

您可以使用条件?

when: ansible_devices.sda exists

或者您可以遍历ansible_devices.keys()和with_items。

答案 1 :(得分:0)

我们可以在下面的ansible playbook中使用has_key来检查密钥。

when: ansible_devices.has_key('sda')

以上检查解决了我的胎儿错误,因为我为这两个键添加了两个任务。但我仍然在寻找解决方案,我可以通过索引号获得这些关键值。它将多个条件替换为一个。