2

我想知道如何循环多个任务直到满足条件。

#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 }}"

#output.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

#cat /tmp/output2

Synced
Syncing
Synced
Failed

我正在使用这个,但是当子任务失败时剧本会退出。

我的目标是确保 output2 中的所有内容都是“同步的”,循环output.yml直到结果为“同步”,或者在 x 次尝试后失败。

欣赏是否有更好的方法来做到这一点。谢谢,谢谢

4

1 回答 1

3

我想我在这里找到了答案。

来自 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
于 2021-01-27T09:17:55.363 回答