Ansible中的标准输出线上的循环

2024-06-25 07:00:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用Ansible查询vmware ESX box以获取磁盘ID,但是,我无法循环使用标准列表中的stdout_行

我的问题是:

- 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"
    ]
}

现在,我想循环disk_list.stdout_lines,如下所示

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

但是,对于上述步骤,我没有得到任何输出。我不知道这里发生了什么。stdout_lines看起来是一个带引号的正确python列表,但是带有{{ item }}的循环根本不会循环


Tags: pathnamebox列表stdoutmsglistdevices
2条回答

终于找到了问题所在

在我的ansible.cfg中,我使用了stdout_callback=counter_enabled,这会在使用循环时弄乱标准输出。虽然与循环相关的任务确实有效,但没有显示在标准输出中,这会让用户误以为循环没有按预期执行

要修复,我必须设置stdout_callback=default

当使用:with_项时,它应该可以工作

相关问题 更多 >