【问题标题】:Ansible - create a list of unused disksAnsible - 创建未使用磁盘的列表
【发布时间】:2019-02-22 01:36:02
【问题描述】:

我正在尝试根据收集事实创建未使用磁盘的列表

-

           key | search ("sd")

     with_dict: "{{ ansible_devices }}"

但它只显示一个磁盘,例如如果服务器有两个未使用的磁盘 sdb 和 sdc ,它只显示 sdb。如何修改我的代码以包含所有未使用的磁盘。

【问题讨论】:

    标签: ansible


    【解决方案1】:

    按照您的方式,set_fact 等于迭代中的“当前”项,这可能就是您在最终结果中只看到 1 个磁盘的原因。您需要将disks 设置为元素列表,并将当前item.key 附加到该列表中。你可以使用这个语法:

    set_fact:
       disks: "{{ disks|default([]) + ['/dev/{{item.key}}'] }}"
    

    要了解在with_dict 子句的循环中有多少结果,您可以尝试debug 任务:

    - name: Print disk result
    
         debug:
            msg: "/dev/{{item.key}}"
    
         when:
         - not item.value.partitions
         - not item.value.holders
         - not item.value.links.ids
         - item.key | search ("sd")
    
         with_dict: "{{ ansible_devices }}"
    

    (缩进可能需要修复,我只是从您的代码中复制的)

    希望对你有帮助

    【讨论】:

    • 您好,感谢您的回复,显示结果如下: => { "disks": [ "/dev/sdc", "/dev/{{item.key}}" ]
    • 那是相当奇怪的输出...你能发布ansible_devices 变量在你的设置中的样子吗?您可以编辑您的问题并添加此信息。
    【解决方案2】:

    感谢回复,我使用上面提到的代码打印磁盘结果,它显示了多个磁盘,但是当我使用 set_fact 和 msg 显示变量时,它的显示如下:-

    "disks": [
            "/dev/sdc",
            "/dev/{{item.key}}"
        ]
    
    
       - name: Print disk result
         set_fact:
            disks: "{{ disks|default([]) + ['/dev/{{item.key}}'] }}"
         when:
         - not item.value.partitions
         - not item.value.holders
         - not item.value.links.ids
         - item.key | search ("sd")
         with_dict: "{{ ansible_devices }}"
    
       - debug: var=disks
    

    【讨论】:

    • 请解释您的答案。它也将有助于未来的读者。
    猜你喜欢
    • 2019-03-27
    • 1970-01-01
    • 2017-10-16
    • 1970-01-01
    • 2020-08-08
    • 2012-12-29
    • 1970-01-01
    • 1970-01-01
    • 2017-12-31
    相关资源
    最近更新 更多