执行 ansible include_tasks 直到满足某个条件(类似于 while until 循环)

Execute ansible include_tasks until a certain condition is met (kind of while until loop)

我想执行包含任务列表直到满足特定条件,我没有固定循环但执行取决于条件。

下面的示例播放

任务列表剧本 tasks.yml

---

- name: "inc test-var {{ test_var }}"
  set_fact:
    test_var: "{{ test_var | int + 1  }} "

父剧本parent.yml

---

- hosts: all
  gather_facts: no

  tasks:
    - set_fact:
        test_var: '1'
        req_var: '4'

    - name: "Test multi run of task"
      include_tasks: ./includes/tasks.yml
      register: versions_result
      until: test_var is version(req_var, '<')
      retries: 5

这里我期望 parent.yml 任务会 运行 多次,但它只会 运行 一次。 有人可以指出我做错了什么以及如何 运行 多次执行任务直到满足条件。

干杯,

多次include_tasks的一种方法是遍历数字范围,直到达到所需的数字。然而,正如您所期望的那样,“父”剧本不会 运行 多次,任务文件将会。

考虑下面的例子:

通过我的主要剧本 parent.yml,我想 运行 tasks1.yml 多次(如 set_fact 中定义)。

  tasks:
  - set_fact:
      num: 1
      req_num: 4
  - include_tasks: tasks1.yml
    loop: "{{ range(num, req_num + 1)|list }}"

在我的 tasks1.yml 中,我有一条简单的 debug 消息:

- debug:
    msg: "Run {{ item }}"

包括 tasks1.yml 4 次,当我 运行 ansible-playbook parent.yml:

时给出以下输出
TASK [include_tasks] ******************************************************************************************************************************************************************
included: /home/user/tasks1.yml for localhost
included: /home/user/tasks1.yml for localhost
included: /home/user/tasks1.yml for localhost
included: /home/user/tasks1.yml for localhost

TASK [debug] **************************************************************************************************************************************************************************
ok: [localhost] => 
  msg: Run 1

TASK [debug] **************************************************************************************************************************************************************************
ok: [localhost] => 
  msg: Run 2

# ...goes till "Run 4"