通过索引号从可见的收集事实变量访问值

  • 本文关键字:事实 变量 访问 索引 ansible
  • 更新时间 :
  • 英文 :


我使用收集事实变量来获取有关主机的大小信息。对于某些服务器,我得到变量"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')

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

最新更新