2 thuộc tính
Thêm một thuộc tính lựa chọn đến các mục, ví dụ:
- bộ_thực tế:
rdm_sel: "{{ rdm_sel|d([]) + [item|combine({'selection': selection})] }}"
vòng lặp: "{{rdm_info }}"
lọ:
scsi_controller: "{{ item.scsi_controller.split(',') }}"
unit_number: "{{ item.unit_number.split(',') }}"
lựa chọn: "{{ scsi_controller|
zip(số_đơn_vị)|
rejectattr('0', 'eq', '0') }}"
cho
rdm_sel:
- scsi_controller: 0,0,1,1,1,2,2,3,3,3,3
lựa chọn:
- ['1', '2']
- ['1', '0']
- ['1', '1']
- ['2', '0']
- ['2', '1']
- ['3', '0']
- ['3', '1']
- ['3', '14']
- ['3', '15']
số_đơn vị: 0,1,2,0,1,0,1,0,1,14,15
vm_name: test_vm
Sau đó, lặp đi lặp lại with_subelements
- gỡ lỗi:
tin nhắn: >-
tên: {{ item.0.vm_name }}
scsi_controller: {{ item.1.0 }}
unit_number: {{ item.1.1 }}
with_subelements:
- "{{rdm_sel }}"
- lựa chọn
cho
msg: 'tên: test_vm scsi_controller: 1 unit_number: 2'
msg: 'tên: test_vm scsi_controller: 1 unit_number: 0'
msg: 'tên: test_vm scsi_controller: 1 unit_number: 1'
msg: 'tên: test_vm scsi_controller: 2 unit_number: 0'
msg: 'tên: test_vm scsi_controller: 2 unit_number: 1'
msg: 'tên: test_vm scsi_controller: 3 unit_number: 0'
msg: 'tên: test_vm scsi_controller: 3 unit_number: 1'
msg: 'tên: test_vm scsi_controller: 3 unit_number: 14'
msg: 'tên: test_vm scsi_controller: 3 unit_number: 15'
Tùy chọn, thêm tất cả các đơn vị
- bộ_thực tế:
rdm_units: "{{ rdm_units|d([]) + [item|combine({'units': units})] }}"
vòng lặp: "{{rdm_info }}"
loop_control:
nhãn: "{{ item.vm_name }}"
lọ:
scsi_controller: "{{ item.scsi_controller.split(',') }}"
unit_number: "{{ item.unit_number.split(',') }}"
đơn vị: "{{ scsi_controller|zip(unit_number) }}"
cho
rdm_units:
- scsi_controller: 0,0,1,1,1,2,2,3,3,3,3
số_đơn vị: 0,1,2,0,1,0,1,0,1,14,15
các đơn vị:
- ['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
Sau đó, chọn các đơn vị trong vòng lặp. Nhiệm vụ dưới đây cho kết quả tương tự.
- gỡ lỗi:
tin nhắn: >-
tên: {{ item.0.vm_name }}
scsi_controller: {{ item.1.0 }}
unit_number: {{ item.1.1 }}
with_subelements:
- "{{rdm_units}}"
- các đơn vị
khi: item.1.0 != '0'
Nhiều thuộc tính
Ansible không cung cấp cho bạn bộ lọc để nén danh sách các danh sách. Tuy nhiên, bạn có thể tạo bộ lọc tùy chỉnh rất đơn giản, ví dụ:
shell> cat filter_plugins/zip2.py
định zip2(l):
trả về zip(*l)
lớp FilterModule (đối tượng):
bộ lọc def (bản thân):
trở lại {
'zip2': zip2,
}
Bây giờ, hãy tạo một danh sách các thuộc tính (_phím), trích xuất Các dây, tách ra các mặt hàng, và tham gia các đối số cho bộ lọc zip2. Sau đó tạo lựa chọn từ tất cả _phím. Ví dụ: đưa ra dữ liệu đơn giản hóa để thử nghiệm
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
nhiệm vụ dưới đây
- bộ_thực tế:
rdm_sel: "{{ rdm_sel|d([]) + [item|combine({'selection': selection})] }}"
vòng lặp: "{{rdm_info }}"
lọ:
_phím: [x, y, z]
_args: "{{ _keys|map('extract', item)|map('split', ',')|join(',') }}"
lựa chọn: "{{ _args|zip2|rejectattr('0', 'eq', '0') }}"
cho
rdm_sel:
- n: A
lựa chọn:
- ['2', '5', '8']
- ['3', '6', '9']
x: 0,2,3
y: 4,5,6
z: 7,8,9
- n: B
lựa chọn:
- ['1', '4', '7']
- ['3', '6', '9']
x: 1,0,3
y: 4,5,6
z: 7,8,9
- n:C
lựa chọn:
- ['1', '4', '7']
- ['2', '5', '8']
x: 1,2,0
y: 4,5,6
z: 7,8,9