2 atribute
Adăugați un atribut selecţie la articole, de ex.
- set_fact:
rdm_sel: „{{ rdm_sel|d([]) + [articol|combine({'selectie': selectie})] }}"
buclă: „{{ rdm_info }}”
vars:
scsi_controller: „{{ item.scsi_controller.split(',') }}”
unit_number: „{{ item.unit_number.split(',') }}”
selecție: „{{ scsi_controller|
zip(număr_unitate)|
rejectattr('0', 'eq', '0') }}"
dă
rdm_sel:
- scsi_controller: 0,0,1,1,1,2,2,3,3,3,3
selecţie:
- ['1', '2']
- ['1', '0']
- ['1', '1']
- ['2', '0']
- ['2', '1']
- ['3', '0']
- ['3', '1']
- ['3', '14']
- ['3', '15']
număr_unitate: 0,1,2,0,1,0,1,0,1,14,15
vm_name: test_vm
Apoi, repetați cu_subelemente
- depanare:
mesaj: >-
nume: {{ item.0.vm_name }}
scsi_controller: {{ item.1.0 }}
unit_number: {{ item.1.1 }}
cu_subelemente:
- „{{ rdm_sel }}”
- selectie
dă
msg: 'nume: test_vm scsi_controller: 1 unit_number: 2'
msg: 'nume: test_vm scsi_controller: 1 unit_number: 0'
msg: 'nume: test_vm scsi_controller: 1 unit_number: 1'
msg: 'nume: test_vm scsi_controller: 2 unit_number: 0'
msg: 'nume: test_vm scsi_controller: 2 unit_number: 1'
msg: 'nume: test_vm scsi_controller: 3 unit_number: 0'
msg: 'nume: test_vm scsi_controller: 3 unit_number: 1'
msg: 'nume: test_vm scsi_controller: 3 unit_number: 14'
msg: 'nume: test_vm scsi_controller: 3 unit_number: 15'
Opțional, adăugați toate unitati
- set_fact:
rdm_units: „{{ rdm_units|d([]) + [articol|combine({'unități': unități})] }}"
buclă: „{{ rdm_info }}”
loop_control:
etichetă: „{{ item.vm_name }}”
vars:
scsi_controller: „{{ item.scsi_controller.split(',') }}”
unit_number: „{{ item.unit_number.split(',') }}”
unități: „{{ scsi_controller|zip(unit_number) }}”
dă
rdm_units:
- scsi_controller: 0,0,1,1,1,2,2,3,3,3,3
număr_unitate: 0,1,2,0,1,0,1,0,1,14,15
unitati:
- ['0', '0']
- ['0', '1']
- ['1', '2']
- ['1', '0']
- ['1', '1']
- ['2', '0']
- ['2', '1']
- ['3', '0']
- ['3', '1']
- ['3', '14']
- ['3', '15']
vm_name: test_vm
Apoi, selectați unitățile din buclă. Sarcina de mai jos oferă același rezultat.
- depanare:
mesaj: >-
nume: {{ item.0.vm_name }}
scsi_controller: {{ item.1.0 }}
unit_number: {{ item.1.1 }}
cu_subelemente:
- „{{ rdm_units }}”
- unitati
când: item.1.0 != '0'
Atribute multiple
Ansible nu vă oferă un filtru pentru a arhiva o listă de liste. Dar, puteți crea un filtru personalizat foarte simplu, de ex
shell> cat filter_plugins/zip2.py
def zip2(l):
zip de returnare(*l)
clasa FilterModule(obiect):
def filters(self):
întoarcere {
„zip2”: zip2,
}
Acum, creați o listă a atributelor (_chei), extrage corzile, Despică articolele și a te alatura argumentele pentru filtru zip2. Apoi creează selecţie de la toti _chei. De exemplu, având în vedere datele simplificate pentru testare
rdm_info:
- x: 0,2,3
y: 4,5,6
z: 7,8,9
N / A
- x: 1,0,3
y: 4,5,6
z: 7,8,9
n: B
- x: 1,2,0
y: 4,5,6
z: 7,8,9
n: C
sarcina de mai jos
- set_fact:
rdm_sel: „{{ rdm_sel|d([]) + [articol|combine({'selectie': selectie})] }}"
buclă: „{{ rdm_info }}”
vars:
_chei: [x, y, z]
_args: „{{ _keys|map('extract', item)|map('split', ',')|join(',') }}"
selecție: „{{ _args|zip2|rejectattr('0', 'eq', '0') }}"
dă
rdm_sel:
- N / A
selecţie:
- ['2', '5', '8']
- ['3', '6', '9']
x: 0,2,3
y: 4,5,6
z: 7,8,9
-n:B
selecţie:
- ['1', '4', '7']
- ['3', '6', '9']
x: 1,0,3
y: 4,5,6
z: 7,8,9
- n: C
selecţie:
- ['1', '4', '7']
- ['2', '5', '8']
x: 1,2,0
y: 4,5,6
z: 7,8,9