我对此怀疑,是否支持这种情况。 场景-块具有条件和时间。 块中的任务再次具有其他条件(何时)。 例如:main.yml任务具有
- block:
- name: task 1
shell: check_install
when: ansible_distribution == 'CentOS'
- name: task 2
shell: echo "test task"
when: out.rc > "0" #assuming **out** is registered above
become: true
when: sw_install|default(False) == True
根据Ansible文档,
您可以应用于单个任务的大部分内容( 循环)可以应用于块级 更容易设置任务共有的数据或指令。这不 表示该指令会影响代码块本身,但由 块围起来的任务。也就是说,何时应用任务, 不是方块本身。
因此,基本问题是,如果我用上述任务运行剧本,那么条件流将如何发生。它像和条件那样运行吗?
像
run task 1 when: block conditional & task one conditional satisfies
run task 2 when: block conditional & task two conditional satisfies
答案 0 :(得分:1)
向块添加条件与向块内的每个任务添加相同条件完全相同。
如果您在块级有一个条件,而在任务级有另一个条件,则将在任务运行时对其进行评估。
这还意味着,如果您的一项任务在运行期间更改了块条件,则每次都会对其进行重新评估。请看以下示例:
- name: Set a block condition true
set_fact:
block_condition: true
- name: Set a task condition true
set_fact:
task_condition: true
- block:
- name: Write a message
debug:
msg: Block and task conditions are true
when: task_condition | bool
- name: Change condition
set_fact:
block_condition: false
- name: Write a message
debug:
msg: Block condition is true
when: block_condition | bool
在这种情况下,块的最后一个任务将被跳过,因为block_condition
将在运行时转移到false
。