У меня такое чувство, что вы вычисляете много вещей, просто чтобы продолжить их, когда ansible может выполнить эту работу за вас. Я также понял, что вы хотите получить доступ к / показать индекс для каждого вложения (индекс не в ваших текущих данных).
В следующем примере я немного уменьшил выборку данных, но я думаю, что она в значительной степени делает все, что вам нужно,Просто адаптируйтесь так, чтобы вы выполняли больше задач с циклами для отображения / запуска модулей с соответствующими данными
Примечание: когда я спросил в своем комментарии о MCVE , это именно то, о чем я думалabout: playbook, который вы можете скопировать и запустить напрямую, без необходимости объединять все части. Пожалуйста, подумайте об этом для ваших будущих вопросов и ответов.
---
- name: Manipulate result list demo
hosts: localhost
gather_facts: false
vars:
# Data structure reduced and minimfied on single line
result: {ansible_facts: {enclosures: [{deviceBayCount: 2, deviceBays: [{bayNumber: 1, devicePresence: Present}, {bayNumber: 2, devicePresence: Present}]}, {deviceBayCount: 4, deviceBays: [{bayNumber: 1, devicePresence: Present}, {bayNumber: 2, devicePresence: Present}, {bayNumber: 3, devicePresence: Absent}, {bayNumber: 4, devicePresence: Absent}]}]}, changed: false, invocation: {module_args: {config: , password: null, username: null}}}
tasks:
- name: Show initial data (use -v to show)
debug:
var: result
verbosity: 1
- name: Create a single structure containing all the data we need
vars:
my_current_enclosure:
enclosure_number: "{{ index }}"
number_of_devices: "{{ item.deviceBays | length }}"
## Note this later one can probably be replaced by following ?
# number_of_devices: "{{ item.deviceBayCount }}"
deviceBays: "{{ item.deviceBays }}" # simply copy existing data
set_fact:
my_enclosures: "{{ my_enclosures | default([]) + [my_current_enclosure] }}"
loop: "{{ result.ansible_facts.enclosures | flatten(levels=1) }}"
loop_control:
index_var: index
- name: Show the new calculated data structure (use -v to show)
debug:
var: my_enclosures
verbosity: 1
- name: Display device number for each enclosure
debug:
msg: "Enclosure number {{ item.enclosure_number }} has {{ item.number_of_devices }} device(s)"
loop: "{{ my_enclosures }}"
- name: Show status of each device bay
debug:
msg: "Enclosure: {{ item.0.enclosure_number }} - Bay number: {{ item.1.bayNumber }} - Status: {{ item.1.devicePresence }}"
loop: "{{ lookup('subelements', my_enclosures, 'deviceBays') }}"
И результат (бегло наберите -v
, чтобы получить более подробную информацию)
PLAY [Manipulate result list demo] **************************************************************************************************************************************************************************************************************************************
TASK [Show initial data (use -v to show)] *******************************************************************************************************************************************************************************************************************************
skipping: [localhost]
TASK [Create a single structure containing all the data we need] ********************************************************************************************************************************************************************************************************
ok: [localhost] => (item={'deviceBayCount': 2, 'deviceBays': [{'bayNumber': 1, 'devicePresence': 'Present'}, {'bayNumber': 2, 'devicePresence': 'Present'}]})
ok: [localhost] => (item={'deviceBayCount': 4, 'deviceBays': [{'bayNumber': 1, 'devicePresence': 'Present'}, {'bayNumber': 2, 'devicePresence': 'Present'}, {'bayNumber': 3, 'devicePresence': 'Absent'}, {'bayNumber': 4, 'devicePresence': 'Absent'}]})
TASK [Show the new calculated data structure (use -v to show)] **********************************************************************************************************************************************************************************************************
skipping: [localhost]
TASK [Display device number for each enclosure] *************************************************************************************************************************************************************************************************************************
ok: [localhost] => (item={'enclosure_number': 0, 'number_of_devices': '2', 'deviceBays': [{'bayNumber': 1, 'devicePresence': 'Present'}, {'bayNumber': 2, 'devicePresence': 'Present'}]}) => {
"msg": "Enclosure number 0 has 2 device(s)"
}
ok: [localhost] => (item={'enclosure_number': 1, 'number_of_devices': '4', 'deviceBays': [{'bayNumber': 1, 'devicePresence': 'Present'}, {'bayNumber': 2, 'devicePresence': 'Present'}, {'bayNumber': 3, 'devicePresence': 'Absent'}, {'bayNumber': 4, 'devicePresence': 'Absent'}]}) => {
"msg": "Enclosure number 1 has 4 device(s)"
}
TASK [Show status of each device bay] ***********************************************************************************************************************************************************************************************************************************
ok: [localhost] => (item=[{'enclosure_number': 0, 'number_of_devices': '2'}, {'bayNumber': 1, 'devicePresence': 'Present'}]) => {
"msg": "Enclosure: 0 - Bay number: 1 - Status: Present"
}
ok: [localhost] => (item=[{'enclosure_number': 0, 'number_of_devices': '2'}, {'bayNumber': 2, 'devicePresence': 'Present'}]) => {
"msg": "Enclosure: 0 - Bay number: 2 - Status: Present"
}
ok: [localhost] => (item=[{'enclosure_number': 1, 'number_of_devices': '4'}, {'bayNumber': 1, 'devicePresence': 'Present'}]) => {
"msg": "Enclosure: 1 - Bay number: 1 - Status: Present"
}
ok: [localhost] => (item=[{'enclosure_number': 1, 'number_of_devices': '4'}, {'bayNumber': 2, 'devicePresence': 'Present'}]) => {
"msg": "Enclosure: 1 - Bay number: 2 - Status: Present"
}
ok: [localhost] => (item=[{'enclosure_number': 1, 'number_of_devices': '4'}, {'bayNumber': 3, 'devicePresence': 'Absent'}]) => {
"msg": "Enclosure: 1 - Bay number: 3 - Status: Absent"
}
ok: [localhost] => (item=[{'enclosure_number': 1, 'number_of_devices': '4'}, {'bayNumber': 4, 'devicePresence': 'Absent'}]) => {
"msg": "Enclosure: 1 - Bay number: 4 - Status: Absent"
}
PLAY RECAP **************************************************************************************************************************************************************************************************************************************************************
localhost : ok=3 changed=0 unreachable=0 failed=0 skipped=2 rescued=0 ignored=0