【发布时间】:2019-02-22 01:36:02
【问题描述】:
我正在尝试根据收集事实创建未使用磁盘的列表
-
key | search ("sd")
with_dict: "{{ ansible_devices }}"
但它只显示一个磁盘,例如如果服务器有两个未使用的磁盘 sdb 和 sdc ,它只显示 sdb。如何修改我的代码以包含所有未使用的磁盘。
【问题讨论】:
标签: ansible
我正在尝试根据收集事实创建未使用磁盘的列表
-
key | search ("sd")
with_dict: "{{ ansible_devices }}"
但它只显示一个磁盘,例如如果服务器有两个未使用的磁盘 sdb 和 sdc ,它只显示 sdb。如何修改我的代码以包含所有未使用的磁盘。
【问题讨论】:
标签: ansible
按照您的方式,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 }}"
(缩进可能需要修复,我只是从您的代码中复制的)
希望对你有帮助
【讨论】:
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
【讨论】: