slo*_*ang 3 loops ansible until-loop
我想知道如何循环多个任务直到满足条件。
#main.yml
- set_fact:
num: 1
req_num: 10
- name: Start to unregister entities
include_tasks: output.yml
loop: "{{ range(num, req_num + 1)|list }}"
Run Code Online (Sandbox Code Playgroud)
#输出.yml
- name: get status
raw: cat /tmp/output
register: rawoutput
- name: copy to localhost
copy:
content: "{{rawoutput.stdout}}"
dest: /tmp/output1
delegate_to: localhost
- name: reg output2
shell: awk something /tmp/output1 |awk '/something/,0' |head -n something |tail -n something > /tmp/output2 ; cat /tmp/output2
register: output2
delegate_to: localhost
- name: compare output2
debug:
msg: "{{item}}"
with_items: "{{ output2.stdout_lines }}"
until: item == "Synced"
retries: 2
delay: 2
Run Code Online (Sandbox Code Playgroud)
#cat /tmp/输出2
Synced
Syncing
Synced
Failed
Run Code Online (Sandbox Code Playgroud)
我正在使用这个,但是当子任务失败时剧本会退出。
我的目标是确保 output2 中的所有内容都是“已同步”,循环output.yml直到结果是“已同步”,或者在 x 次尝试后失败。
如果有更好的方法来做到这一点,我们将不胜感激。谢谢,谢谢
我想我在这里找到了答案。
来自 ovski4
- name: 'Wait until success'
block:
- name: Set the retry count
set_fact:
retry_count: "{{ 0 if retry_count is undefined else retry_count|int + 1 }}"
- name: Get server updated ip
uri:
url: https://localhost/ip
return_content: yes
status_code: 200
register: ip
- name: ssh to the server
wait_for:
host: "{{ ip }}"
port: 22
timeout: 30
state: started
rescue:
- fail:
msg: Ended after 5 retries
when: retry_count|int == 5
- debug:
msg: "Failed to connect - Retrying..."
- include_tasks: wait_until_success.yml
Run Code Online (Sandbox Code Playgroud)