Ansible 在stdout上迭代

Ansible 在stdout上迭代,ansible,Ansible,我正在写一本剧本来定位一系列文件中的字符串模式。如果我通过命令模块运行我的实用程序,它将在STDOUT上生成一个或多个字符串。要在多个系统上运行此命令,我希望使用以下项目运行该命令: - command: "findstring {{ item }}" with_items: - "string1" - "string2" register: found failed_when: found.rc >= 2 然后迭代结果以后期处理信息: - name:

我正在写一本剧本来定位一系列文件中的字符串模式。如果我通过命令模块运行我的实用程序,它将在STDOUT上生成一个或多个字符串。要在多个系统上运行此命令,我希望使用以下项目运行该命令:

  - command: "findstring {{ item }}"
  with_items:
    - "string1"
    - "string2"
  register: found
  failed_when: found.rc >= 2
然后迭代结果以后期处理信息:

 - name: Print strings we found   
   debug:
     var: "{{ item }}"   
   with_items: found.results

在上面的任务中,是否有与loop.index等效的东西可以与“results”一起使用?这将允许我执行类似{item[INDEX].stdout}的操作来获取生成的字符串。我在官方文档中找不到答案,所以我想我会在这里发布,看看大师们是怎么想的。

如果需要迭代所有命令的每一行,请使用:

- debug:
    msg: "Do smth for line {{ item }}"
  with_items: "{{ found | json_query('results[].stdout_lines[]') }}"

这将从找到的
中提取ever元素。结果
,然后从每个
标准行中提取每个元素

您发布的代码中至少有三个明显的问题;从使用过时的语法到在不检查变量值的情况下把事情放在一起。尝试排除故障并找出真正的问题。格式可能已关闭,但代码在ansible 2.3.1.0中运行正常。在格式非常重要的语言(如YAML)中,您需要确保发布的代码是正确的。否则,我们无法区分“真正的问题”和“您忘记缩进某些东西”。在第一个任务之后,将
found
变量的内容包括在问题中也会有所帮助(例如,将
debug
任务的输出包括在
var:found
中)。