Ansible win_disk_facts проблема с получением буквы диска - PullRequest
0 голосов
/ 04 марта 2020

Я пытаюсь установить общий доступ ко всем дискам на хосте windows. Я использую win_disk_facts, чтобы получить все диски, присутствующие на хосте, затем мне удается l oop через диски, но я не могу получить букву диска по некоторым причинам. Не владею YAML, я почти уверен, что проблема в моем синтаксисе.

Вот код отладки:

- name: Get disk facts
  win_disk_facts:

- name: debug
  debug:
    msg: '{{ disk.partitions.drive_letter }}'
  loop: '{{ ansible_facts.disks }}'
  loop_control:
    loop_var: disk

Это вернет ошибку:

"msg": "Задача включает в себя параметр с неопределенной переменной. Ошибка была: 'объект списка' не имеет атрибута 'drive_letter'

Но он существует, поэтому должен будет способ, которым я пытаюсь получить к нему доступ.

Любой указатель?

1 Ответ

0 голосов
/ 04 марта 2020

Проблема заключается в том, что свойство 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   

...