我正在尝试使用Ansible查找未使用的磁盘。到目前为止,我能够将未使用的磁盘路径保存在变量中。但是我得到了很多其他无用的信息,例如加号和方括号。我想知道如何过滤列表并获取包含/ dev的字符串。 这是我到目前为止的代码:
- set_fact:
list_of_disks: []
- name: getting list of disks
set_fact:
list_of_disks: "[{{list_of_disks}} + '/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 }}"
- name: display unused disks
debug:
var: list_of_disks.split("'")
这是我得到的输出
"list_of_disks.split(\"'\")": [
"[[[] + ",
"/dev/sde",
"] + ",
"/dev/sdc",
"]"
]
}
我希望输出看起来像 “ / dev / sde”, “ / dev / sdc”,
注意:磁盘名称将从一台服务器更改为另一台服务器。所以我不想只寻找sde和sdc。它应该能够清除列表中出现的所有磁盘。
答案 0 :(得分:0)
好吧,可能不完全是您想要的格式,但是:
- debug:
msg: "{{ item.device }}"
with_items: "{{ ansible_facts.mounts }}"
when: "'/dev/' in item.device"
应该做到这一点。
在本地,我得到了:
TASK [debug] **********************************************************************************************************************************
ok: [localhost] => (item=None) => {
"msg": "/dev/mapper/fedora-root"
}
ok: [localhost] => (item=None) => {
"msg": "/dev/nvme0n1p1"
}
ok: [localhost] => (item=None) => {
"msg": "/dev/mapper/fedora-home"
}
答案 1 :(得分:0)
如果全部需要它们,则创建一个变量并将其附加到该变量上:
- set_fact:
list_of_disks=""
- set_fact:
list_of_disks: "{{ list_of_disks | regex_replace('^, ','') }}, {{ item.device }}"
with_items: "{{ ansible_facts.mounts }}"
when: "'/dev/' in item.device"
- debug:
msg: "{{ list_of_disks }}"
为此,我得到了:
TASK [debug] **********************************************************************************************************************************
ok: [localhost] => {
"msg": "/dev/mapper/fedora-root, /dev/nvme0n1p1, /dev/mapper/fedora-home"
}