Я пытаюсь обратиться к переменной ansible_devices для моего текущего хоста, чтобы извлечь все дисковые устройства SD, которые в настоящее время не имеют раздела.Исходя из этого, мне нужно создать / обновить переменную, которая будет назначать диски имени группы томов в зависимости от размера диска, который затем будет использоваться другой задачей.
Кто-нибудь знает, КАК я могу это сделать?тот?Например, у меня есть следующий тестовый учебник, чтобы поиграться с переменным ansible_devices, но я не смог достичь своей конечной цели.
---
- hosts: all
vars:
disks:
/dev/disk/notfound1 : vg_app
/dev/disk/notfound2 : vg_data
/dev/disk/notfound3 : vg_db
/dev/disk/notfound4 : vg_log
tasks:
- debug:
var: disks
- debug:
msg: " {{ item.key }} = {{ item.value.size }} "
with_dict: "{{ ansible_devices }}"
when: "item.key.startswith('sd') and not item.value.partitions "
Теперь я хочу назначить диск с 10 ГБ для vg_app, 20 ГБ для vg_data, а самый большой из оставшихся дисков для vg_db, а последний оставшийся диск для vg_log.
Итак, теперьмои переменные диски будут выглядеть так:
disks:
/dev/sdc : vg_app
/dev/sdf : vg_data
/dev/sde : vg_db
/dev/sdd : vg_log
Моя следующая задача возьмет эту переменную и создаст на том диске нужные группы томов с нужным размером.Это должно быть динамически, потому что я не могу гарантировать, что диски, добавленные в ВМ, всегда будут иметь одинаковые имена.
ОБНОВЛЕНИЕ: Придумал свое собственное уродливое решение
- name: Collect all SD disk devices along with their SIZES which don't have a partition
set_fact:
disk_sizes : "{{ disk_sizes|default({}) | combine( {item.value.size.split('.')[0]: '/dev/' + item.key } ) }}"
with_dict: "{{ ansible_devices }}"
when: "item.key.startswith('sd') and not item.value.partitions "
- name: Test we have 4 unprovisioned disks in our vm
fail:
msg: "4 disks were not found on the vm"
when: ( disk_sizes | length ) != 4
- name: reset our disks variable to an empty dictionary
set_fact:
disks: "{{ newdict|default({}) }}"
- name: create my new dictionary that will have my disks assigned
set_fact:
disks: "{{ disks|default({}) | combine( { item.key: item.value } ) }}"
with_items:
- { key: "{{disk_sizes['10']}}", value: 'vg_app' }
- { key: "{{disk_sizes['20']}}", value: 'vg_data' }
- name: removed the disks we have used so far
set_fact:
disks2: "{{ disks2|default({}) |combine({item.key: item.value})}}"
when: "item.key not in ['10','20']"
with_dict: "{{ disk_sizes }}"
- name: append the other disks to the disks dictionary
set_fact:
disks: "{{ disks|default({}) | combine( { item.key: item.value } ) }}"
with_items:
- { key: "{{disk_sizes[ disks2.keys() |max ]}}", value: 'vg_db' }
- { key: "{{disk_sizes[ disks2.keys() |min ]}}", value: 'vg_log' }