L oop по stdout_lines в Ansible - PullRequest
0 голосов
/ 29 мая 2020

Я запрашиваю окно vmware ESX, чтобы получить идентификаторы дисков, используя Ansible, однако я не могу l oop поверх stdout_lines, который выглядит стандартным списком.

Здесь это мой запрос:

- name: Collect vSAN disk list
  raw: esxcli storage core device list | grep Devfs 
  delegate_to: esx_box
  register: disk_list

- name: Print disk list
  debug:
    msg: "{{ disk_list.stdout_lines }}"

Вывод для отладки выглядит следующим образом:

ok: 1/1 [esx_box] => {
    "msg": [
        "   Devfs Path: /vmfs/devices/disks/naa.12354ABCDEFGHIJK", 
        "   Devfs Path: /vmfs/devices/disks/naa.12354ABCDEFGHIJK", 
        "   Devfs Path: /vmfs/devices/disks/t10.ATA_____DELLBOSS_VD_____________________________12354ABCDEFGHIJK", 
        "   Devfs Path: /vmfs/devices/disks/naa.12354ABCDEFGHIJK", 
        "   Devfs Path: /vmfs/devices/disks/naa.12354ABCDEFGHIJK", 
        "   Devfs Path: /vmfs/devices/disks/naa.12354ABCDEFGHIJK", 
        "   Devfs Path: /vmfs/devices/genscsi/naa.12354ABCDEFGHIJK", 
        "   Devfs Path: /vmfs/devices/genscsi/eui.12354ABCDEFGHIJK"
    ]
}

Теперь я хотел l oop disk_list.stdout_lines следующим образом

- name: Loop over stdout_lines
  debug:
    msg: "{{ item }}"
  loop: "{{ disk_list.stdout_lines }}"

Но я не получаю никакого вывода для вышеуказанного шага. Я не уверен, что здесь происходит. stdout_lines выглядит правильным списком python с элементами в кавычках, однако l oop с {{ item }} просто не превышает l oop.

1 Ответ

0 голосов
/ 29 июня 2020

Наконец обнаружил, в чем была проблема.

В моем ansible.cfg у меня был stdout_callback=counter_enabled, и это мешает стандартному выводу при использовании циклов. Хотя задачи, относящиеся к l oop, работают, но не отображаются в стандартном выводе, что сбивает пользователя с толку, чтобы предположить, что l oop не выполняется, как предполагалось.

Чтобы исправить, я должен установить stdout_callback=default

...