Проблема заключается в том, что свойство partitions
само является списком, а вы пытаетесь получить к нему доступ как объект / словарь. Вы можете использовать фильтр subelements
для поиска вложенного ключа из списка словарей.
У меня нет машины Windows под рукой, поэтому я не могу проверить это работая, но подшучивая ansible_facts
с моим собственным ansible_fact5
, вот упрощенный рабочий пример:
- hosts: localhost
connection: local
gather_facts: yes
vars:
ansible_fact5:
disks:
- guid: 1,
partitions:
- drive_letter: 'A'
- drive_letter: 'B'
- guid: 2,
partitions:
- drive_letter: 'C'
- drive_letter: 'D'
tasks:
- name: with_subelements -> loop
debug:
msg: "Disk {{ item.0.guid }} - Drive {{ item.1.drive_letter }}"
loop: "{{ ansible_fact5.disks | subelements('partitions') }}"
item.0
относится к каждому отдельному элементу в ansible_fact5.disks
, а item.1
относится к каждому отдельному человеку элемент в ansible_fact5.disks.$.partitions
Когда вы запустите этот playbook, вы получите такой вывод:
$ ansible-playbook test.yaml
...
TASK [with_subelements -> loop] **********************************************************************************************
ok: [localhost] => (item=[{'guid': 1, 'partitions': [{'drive_letter': 'A'}, {'drive_letter': 'B'}]}, {'drive_letter': 'A'}]) => {}
MSG:
Disk 1 - Drive A
ok: [localhost] => (item=[{'guid': 1, 'partitions': [{'drive_letter': 'A'}, {'drive_letter': 'B'}]}, {'drive_letter': 'B'}]) => {}
MSG:
Disk 1 - Drive B
ok: [localhost] => (item=[{'guid': 2, 'partitions': [{'drive_letter': 'C'}, {'drive_letter': 'D'}]}, {'drive_letter': 'C'}]) => {}
MSG:
Disk 2 - Drive C
ok: [localhost] => (item=[{'guid': 2, 'partitions': [{'drive_letter': 'C'}, {'drive_letter': 'D'}]}, {'drive_letter': 'D'}]) => {}
MSG:
Disk 2 - Drive D
PLAY RECAP *******************************************************************************************************************
localhost : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0