带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
并退出。然后,一个接一个地执行附加任务的长列表 如果您需要进行大量检查,我建议您为此任务编写自己的模块