是否阻止它们内部的 ansible 支持条件



我想知道ansible是否支持以下场景:

  • 块有一个条件与时间。
  • 块内的任务再次具有进一步的条件(何时(。

以下是我目前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 文档,

您可以应用于单个任务的大部分内容(除了 循环(可以在块级别应用,这也使它变得很多 更容易设置任务通用的数据或指令。这不 表示指令影响块本身,但由 由块包围的任务。即何时应用于任务, 不是块本身。

所以基本的问题是:如果我运行具有上述任务的剧本,条件流是如何迭代的?它像and一样运行吗?

像这样:

run task 1  when: block conditional & task one conditional satisfies 
run task 2  when: block conditional & task two conditional satisfies

向块中添加条件与向块中的每个任务添加相同的条件完全相同。

如果您在块级别有一个条件,在任务级别有另一个条件,它们都将在任务运行时进行评估。

这也意味着,如果其中一个任务在运行期间更改了块条件,则每次都会重新评估该任务。举个例子:

- 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

最新更新