执行ansible include_tasks,直到满足特定条件(直到循环为止)

时间:2020-10-02 00:03:46

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

干杯

1 个答案:

答案 0 :(得分: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.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"