0

我正在使用收集事实变量来获取有关主机的大小信息。对于某些服务器,我得到了变量"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 键中的特殊字符,这就是我无法获取其值的原因。

有没有办法通过键索引访问这个变量{{ ansible_devices[0].size }}?或任何其他更好的方式来访问它。

4

2 回答 2

0

可以用条件吗?

when: ansible_devices.sda exists

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

于 2014-06-22T15:48:45.210 回答
0

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

when: ansible_devices.has_key('sda')

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

于 2014-06-25T06:00:58.380 回答