繁体   English   中英

Ansible - 创建未使用磁盘的列表

[英]Ansible - create a list of unused disks

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

-

           key | search ("sd")

     with_dict: "{{ ansible_devices }}"

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

按照您的方式, 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 }}"

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

希望能帮助到你

感谢您的回复,我使用提到的代码打印磁盘结果,它显示多个磁盘,但是当我使用 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

如果有人一直在寻找答案,这对我有用:

- 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 | regex_search ("sd")
  with_dict: "{{ ansible_devices }}"

- name: debug
  debug:
    msg: "{{disks}}"

它返回:

ok: [localhost] => {
    "msg": [
        "/dev/sdb"
    ]
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM