2 คุณลักษณะ
เพิ่มแอตทริบิวต์ การเลือก ไปยังรายการ เช่น
- set_fact:
rdm_sel: "{{ rdm_sel|d([]) + [item|combine({'selection': selection})] }}"
วนซ้ำ: "{{ rdm_info }}"
วาร์:
scsi_controller: "{{ item.scsi_controller.split(',') }}"
unit_number: "{{ item.unit_number.split(',') }}"
การเลือก: "{{ scsi_controller|
zip(unit_number)|
ปฏิเสธattr('0', 'eq', '0') }}"
ให้
rdm_sel:
- scsi_controller: 0,0,1,1,1,2,2,2,3,3,3,3
การเลือก:
- ['1', '2']
- ['1', '0']
- ['1', '1']
- ['2', '0']
- ['2', '1']
- ['3', '0']
- ['3', '1']
- ['3', '14']
- ['3', '15']
unit_number: 0,1,2,0,1,0,1,0,1,14,15
vm_name: test_vm
จากนั้นทำซ้ำ with_subelements
- แก้ปัญหา:
ข้อความ: >-
ชื่อ: {{ item.0.vm_name }}
scsi_controller: {{ รายการ 1.0 }}
unit_number: {{ รายการ 1.1 }}
with_subelements:
- "{{ rdm_sel }}"
- การเลือก
ให้
msg: 'ชื่อ: test_vm scsi_controller: 1 unit_number: 2'
msg: 'ชื่อ: test_vm scsi_controller: 1 unit_number: 0'
msg: 'ชื่อ: test_vm scsi_controller: 1 unit_number: 1'
msg: 'ชื่อ: test_vm scsi_controller: 2 unit_number: 0'
msg: 'ชื่อ: test_vm scsi_controller: 2 unit_number: 1'
msg: 'ชื่อ: test_vm scsi_controller: 3 unit_number: 0'
msg: 'ชื่อ: test_vm scsi_controller: 3 unit_number: 1'
msg: 'ชื่อ: test_vm scsi_controller: 3 unit_number: 14'
msg: 'ชื่อ: test_vm scsi_controller: 3 unit_number: 15'
เพิ่มทั้งหมดหรือไม่ก็ได้ หน่วย
- set_fact:
rdm_units: "{{ rdm_units|d([]) + [item|combine({'units': units})] }}"
วนซ้ำ: "{{ rdm_info }}"
loop_control:
ป้ายกำกับ: "{{ item.vm_name }}"
วาร์:
scsi_controller: "{{ item.scsi_controller.split(',') }}"
unit_number: "{{ item.unit_number.split(',') }}"
หน่วย: "{{ scsi_controller|zip(unit_number) }}"
ให้
rdm_units:
- scsi_controller: 0,0,1,1,1,2,2,2,3,3,3,3
unit_number: 0,1,2,0,1,0,1,0,1,14,15
หน่วย:
- ['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
จากนั้นเลือกหน่วยในลูป งานด้านล่างให้ผลลัพธ์เดียวกัน
- แก้ปัญหา:
ข้อความ: >-
ชื่อ: {{ item.0.vm_name }}
scsi_controller: {{ รายการ 1.0 }}
unit_number: {{ รายการ 1.1 }}
with_subelements:
- "{{ rdm_units }}"
- หน่วย
เมื่อ: item.1.0 != '0'
หลายแอตทริบิวต์
Ansible ไม่มีตัวกรองให้คุณซิปรายการ แต่คุณสามารถสร้างตัวกรองแบบกำหนดเองง่ายๆ ได้ เช่น
เปลือก> cat filter_plugins/zip2.py
def zip2(l):
ส่งไปรษณีย์กลับ (* l)
คลาส FilterModule (วัตถุ):
ตัวกรอง def (ตัวเอง):
กลับ {
'zip2': ซิป 2,
}
ตอนนี้ สร้างรายการของแอตทริบิวต์ (_คีย์), สารสกัด สตริง แยก รายการและ เข้าร่วม อาร์กิวเมนต์สำหรับตัวกรอง ซิป2. จากนั้นสร้าง การเลือก จากทั้งหมด _คีย์. ตัวอย่างเช่น ให้ข้อมูลอย่างง่ายสำหรับการทดสอบ
rdm_info:
- x: 0,2,3
ญ: 4,5,6
z: 7,8,9
n: ก
- x: 1,0,3
ญ: 4,5,6
z: 7,8,9
n: บี
- x: 1,2,0
ญ: 4,5,6
z: 7,8,9
n: ซี
งานด้านล่าง
- set_fact:
rdm_sel: "{{ rdm_sel|d([]) + [item|combine({'selection': selection})] }}"
วนซ้ำ: "{{ rdm_info }}"
วาร์:
_keys: [x, y, z]
_args: "{{ _keys|แผนที่('แยก', รายการ)|แผนที่('แยก', ',')|เข้าร่วม (',') }}"
การเลือก: "{{ _args|zip2|rejectattr('0', 'eq', '0') }}"
ให้
rdm_sel:
- n: ก
การเลือก:
- ['2', '5', '8']
- ['3', '6', '9']
x: 0,2,3
ญ: 4,5,6
z: 7,8,9
- n: บี
การเลือก:
- ['1', '4', '7']
- ['3', '6', '9']
x: 1,0,3
ญ: 4,5,6
z: 7,8,9
- น: ค
การเลือก:
- ['1', '4', '7']
- ['2', '5', '8']
x: 1,2,0
ญ: 4,5,6
z: 7,8,9