首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在ansible_devices[elements]上循环

如何在ansible_devices[elements]上循环
EN

Stack Overflow用户
提问于 2015-08-20 22:14:44
回答 2查看 9.5K关注 0票数 0

我可以从一个主机上收集事实,我可以看到我的硬盘。如何使用ansible_devices变量仅获取驱动器(sda、sdb等)?

我试着做一些类似的事情:

代码语言:javascript
复制
tasks:
- debug: msg={{item.mount}}
  with_items: ansible_mounts

我尝试了以下调试消息,但我看到的唯一变量只有一个驱动器:

代码语言:javascript
复制
debug: msg={{ hostvars[inventory_hostname]["ansible_devices"] }}

代码语言:javascript
复制
 "ansible_devices": {
        "sda": {
            "holders": [],
            "host": "Serial Attached SCSI controller: LSI Logic / Symbios Logic SAS2008 PCI-Express Fusion-MPT SAS-2 [Falcon] (rev 03)",
            "model": "Crucial_CT480M50",
            "partitions": {
                "sda1": {
                    "sectors": "2097152",
                    "sectorsize": 512,
                    "size": "1.00 GB",
                    "start": "2048"
                },
                "sda2": {
                    "sectors": "8388608",
                    "sectorsize": 512,
                    "size": "4.00 GB",
                    "start": "2099200"
                },
                "sda3": {
                    "sectors": "927213568",
                    "sectorsize": 512,
                    "size": "442.13 GB",
                    "start": "10487808"
                }
            },
            "removable": "0",
            "rotational": "0",
            "scheduler_mode": "cfq",
            "sectors": "937703088",
            "sectorsize": "4096",
            "size": "3.49 TB",
            "support_discard": "33553920",
            "vendor": "ATA"
        },
        "sdb": {
            "holders": [],
            "host": "Serial Attached SCSI controller: LSI Logic / Symbios Logic SAS2008 PCI-Express Fusion-MPT SAS-2 [Falcon] (rev 03)",
            "model": "Micron_M500_MTFD",
            "partitions": {
                "sdb1": {
                    "sectors": "1875380224",
                    "sectorsize": 512,
                    "size": "894.25 GB",
                    "start": "4096"
                }
            },
            "removable": "0",
            "rotational": "0",
            "scheduler_mode": "cfq",
            "sectors": "1875385008",
            "sectorsize": "4096",
            "size": "6.99 TB",
            "support_discard": "33553920",
            "vendor": "ATA"
        },
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-08-22 03:53:36

您在模块参数解析中遇到了问题。试着引用这样的论点:

代码语言:javascript
复制
- debug: msg="{{ hostvars[inventory_hostname]["ansible_devices"] }}"

最好使用var而不是msg of module

代码语言:javascript
复制
- debug: var=hostvars[inventory_hostname]["ansible_devices"]

为了降低引用的复杂性,我总是建议将模块参数作为一个小块来传递:

代码语言:javascript
复制
- debug:
    var: hostvars[inventory_hostname]["ansible_devices"]

您可以使用keys()获得一系列设备名称,如@ydaetskcoR中的答案所示:

代码语言:javascript
复制
- debug:
    var: hostvars[inventory_hostname]["ansible_devices"].keys()
票数 5
EN

Stack Overflow用户

发布于 2015-08-21 18:14:24

您可以看到,ansible_devices是连接到主机上的所有不同设备的字典,因此您可以通过使用.keys()轻松地获得所有设备名称的列表。

此外,在测试以查看变量设置为什么时,您应该使用debugvar而不是msg

因此,您的调试命令应该是:

代码语言:javascript
复制
debug: var={{ hostvars[inventory_hostname]["ansible_devices"].keys() }}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32129325

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档