0

我正在使用收集事实变量从ansible_devices 变量中获取大小。对于某些主机,我得到了变量"ansible_devices": { "sda",而对于少数服务器,我得到了"ansible_devices": { "cciss!c0d0".

问题:-当我使用ansible变量时,{{ ansible_devices.sda.size }}它工作得很好。但是,当我尝试从{{ ansible_devices.cciss!c0d0.size }}我的剧本中访问值时,它不会返回任何值,而在 jsonansible_devices变量中存在 {{ ansible_devices.cciss!c0d0.size }}.

     {
        "ansible_devices": {
            "cciss!c0d0": {
                "holders": [],
                "host": "RAID bus controller: Hewlett-Packard Company Smart Array Controller (rev 03)",
                "model": "LOGICAL VOLUME",
                "partitions": {},
                "removable": "0",
                "rotational": "1",
                "scheduler_mode": "cfq",
                "sectors": "143299800",
                "sectorsize": "512",
                "size": "68.33 GB",
                "support_discard": "0",
                "vendor": "HP"
            }
        },
        "item": ""
    }

可能是变量 json 键中的特殊字符,ansible这就是我无法获取其值的原因。
谁能建议我如何{{ ansible_devices.cciss!c0d0.size }}在这里访问价值?

4

2 回答 2

1

如果您使用的是 javascript,您还可以将 JSON 数据获取为:

ansible_devices["cciss!c0d0"]

它将在cciss!c0d0键下显示整个对象,然后您可以正常使用像 size 这样的 inbuild 函数。

所以尝试使用:

ansible_devices["cciss!c0d0"].size
于 2014-06-23T16:55:27.643 回答
0

从它的边缘使用ansible_devicesansible 变量hostvars[inventory_hostname]["ansible_devices"]然后它会给我正确的值。我不知道这背后的确切原因是什么,但这是解决这个问题的技巧。

{{ hostvars[inventory_hostname]["ansible_devices"]["cciss!c0d0"]["size"] }}

我在Ansible Project Google Group中得到了这个解决方案

于 2014-06-24T10:19:39.333 回答