2

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

下面是一个示例游戏

任务列表剧本 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任务运行多次,但它只运行一次。有人可以指出我做错了什么以及如何多次运行任务直到满足条件。

干杯,

4

1 回答 1

1

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.yml4 次,并在我运行时给出以下输出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"
于 2020-10-02T05:50:17.407 回答