带Include和Register的Ansible单元循环

带Include和Register的Ansible单元循环,ansible,Ansible,我有以下剧本: # outer.yml - name: wait for inner include: inner.yml retries: 60 delay: 5 until: inner_result.content=="true" with_items: "{{ stuff | default([]) }}" # inner.yml - name: check to see if {{ item.name }} is ready uri: url: "

我有以下剧本:

# outer.yml
- name: wait for inner
  include: inner.yml
  retries: 60
  delay: 5
  until: inner_result.content=="true"
  with_items: "{{ stuff | default([]) }}"

# inner.yml
- name: check to see if {{ item.name }} is ready
  uri:
      url: "http://localhost/someurl/{{ item.name }}/ready/"
      return_content: true
  register: inner_result
Outer正确地执行inner,并对stuff数组的每个元素执行它。但是,直到要求不起作用。即使internal_result.content==“false”,任务也会完成

取消include后,以下操作确实很好:

# outer.yml
- name: wait for stuff to be ready
  uri:
       url: "http://localhost/someurl/{{ item.name }}/ready/"
       return_content: true
  register: inner_result
  retries: 60
  delay: 5
  until: inner_result.content=="true"
  with_items: "{{ stuff | default([]) }}"
但是,我真的希望include版本能够正常工作,因为我希望在循环中包含更多操作。我是做错了什么,还是Ansible不支持将until与包含中定义的寄存器变量一起使用

我使用的是2.1.0.0版


谢谢

当您调用
include
时,Ansible实际上会将包含文件中的任务放在当前任务之后的执行队列中。
在您的示例中,
wait for internal
循环从
中为每个项目生成一长串任务,其中包含\u items
并退出。
然后,一个接一个地执行附加任务的长列表


如果您需要进行大量检查,我建议您为此任务编写自己的模块。

当您调用
include
时,Ansible实际上会将包含文件中的任务放在当前任务之后的执行队列中。
在您的示例中,
wait for internal
循环从
中为每个项目生成一长串任务,其中包含\u items
并退出。
然后,一个接一个地执行附加任务的长列表

如果您需要进行大量检查,我建议您为此任务编写自己的模块