我对ansible还是个新手,并且是stackoverflow的一个新成员。我正在尝试创建一个剧本,以查找未使用的磁盘(可以是SAN,Solidfire或localdisk)。根据大小变量对其进行过滤,并从属于标准的那些磁盘中创建一个卷组。例如,服务器具有2个50GB的磁盘和2个100GB的磁盘。我希望这样做,即使用户输入51Gb大小或49 GB大小,剧本也应该能够考虑到+ -5gb的错误余量。我遇到的问题是如何按大小过滤具有+ 5gb的错误余量的未使用磁盘。 我可以通过
查找未使用的磁盘设置事实: 磁盘:“ {{ansible_local.unused_disks}}”
这给出了未使用磁盘的列表。但是如何过滤上面列出的具有特定误差范围的特定尺寸的列表呢?
编辑::: 是的,你是对的。 ansible_local.unused_disks不存在。在服务器上,我使用自定义事实进行了检查,然后将其放置在服务器上。并非在每台服务器上都如此。因此,我将需要寻找另一种查找磁盘的方法。我检查了另一个SA,并得到了此代码。
- name: Discover Disks
set_fact:
disks: "['/dev/{{item.key}}']"
when:
- not item.value.partitions
- not item.value.holder
- not item.value.links.ids
- item.key | search ("sd")
with_dict: "{{ ansible_devices }}"
但是它给我的输出仅显示找到的第一个未使用的设备,而不是列表中的所有未使用的设备。因此,我也将需要帮助。
答案 0 :(得分:0)
ansible_local不是通常的ansible功能。我用谷歌搜索。是流浪汉吗?
无论如何,您要做的是处理列表,跳过其中的某些元素。这很容易。
- name: do something with a disks of a proper size
command: echo do somewhing with {{ item }}
with_items:' {{ ansible_local.unused_disks }}'
when: min_value <= ansible_devices[item].sectors * ansible_devices[item].sectorsize <= max_value
vars:
min_value: '{{ user_input * 1024 * 1024 * 1024 * 1.05 }}'
max_value: '{{ user_input * 1024 * 1024 * 1024 * 1.05 }}'