我想执行一个包含任务列表,直到满足特定条件为止,我没有固定的循环,但是执行取决于条件。
下面的示例游戏
任务列表剧本
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
任务可以运行多次,但只能运行一次。
有人可以指出我做错了什么,以及如何多次运行任务直到满足条件。
干杯
答案 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"