#ansible
#ansible
Вопрос:
У меня следующая структура
volumeGroupName:
- name: datavg1
log_lv:
name: logs_lv
size: "1G"
app_lv:
name: apps_lv
size: 2G
project_lv:
name: projects_lv
size: 3G
- name: datavg2
log_lv:
name: logs_lv
size: "4G"
И я хочу перебрать все элементы. Я пытался использовать with_subelements, но я могу получить только одну категорию, такую как apps_lvm, и я попробовал также свойство wih_dict, но я не смог получить то, что хотел.
Может быть, структура, которую я использую для переменных, не является правильной??
Комментарии:
1. Не могли бы вы объяснить свою пьесу?
2. Я смог получить то, что хотел, изменив структуру переменных.
3. — hosts: localhost gather_facts: нет переменных: volumeGroupName: — vg_name: datavg1 lvms: — имя: logs_lv размер: «1G» — имя: apps_lv размер: 2G — имя: projects_lv размер: 3G — vg_name: datavg2 lvms: — имя: logs_lv размер: «4G» задачи: — имя:»Отладочные переменные» debug: msg: «vg_name = {{ item.0.vg_name }} lvms_names ={{ item.1.name }} size= {{ item.1.size}}» with_subelements: — «{{ volumeGroupName }}» — размер lvms: «4G»
Ответ №1:
Создайте словарь списков из списка словарей. Например
- set_fact:
GroupVolumeList: "{{ dict(my_groups|zip(my_volumes)) }}"
vars:
my_groups: "{{ volumeGroupName|map(attribute='name')|list }}"
my_volumes: "{{ volumeGroupName|map('dict2items')|list }}"
- debug:
var: GroupVolumeList
дает
GroupVolumeList:
datavg1:
- key: name
value: datavg1
- key: log_lv
value:
name: logs_lv
size: 1G
- key: app_lv
value:
name: apps_lv
size: 2G
- key: project_lv
value:
name: projects_lv
size: 3G
datavg2:
- key: name
value: datavg2
- key: log_lv
value:
name: logs_lv
size: 4G
Затем используйте with_subelements. Например
- debug:
msg: "{{ item.0.key }}
{{ item.1.key }}
{{ item.1.value.name }}
{{ item.1.value.size }}"
with_subelements:
- "{{ GroupVolumeList|dict2items }}"
- value
when: item.1.key != 'name'
дает (сокращенный)
msg: datavg1 log_lv logs_lv 1G
msg: datavg1 app_lv apps_lv 2G
msg: datavg1 project_lv projects_lv 3G
msg: datavg2 log_lv logs_lv 4G