首页 > 解决方案 > 在 Ansible 中循环 stdout_lines

问题描述

我正在查询一个 vmware ESX 框以使用 Ansible 获取磁盘 ID,但是,我无法遍历似乎是标准列表的 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"
    ]
}

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

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

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

标签: pythonloopsansiblejinja2vmware

解决方案


使用时: with_items 它应该可以工作。


推荐阅读