是否阻止 ansible 支持其中的条件

use*_*022 1 ansible ansible-2.x

我对此表示怀疑,ansible 是否支持这种情况。场景 - 块有一个条件与时间。块内的任务再次具有进一步的条件(when)。例如: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
Run Code Online (Sandbox Code Playgroud)

根据 ansible 文档,

您可以应用于单个任务的大部分内容(循环除外)都可以在块级别应用,这也使得设置任务通用的数据或指令变得更加容易。这并不意味着指令会影响块本身,而是由块所包含的任务继承。即何时将应用于任务,而不是块本身。

所以基本问题是,如果我使用上述任务运行剧本,条件流是如何发生的。它是否像条件一样运行 ?

喜欢

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

run task 2  when: block conditional & task two conditional satisfies
Run Code Online (Sandbox Code Playgroud)

Zei*_*tor 5

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

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

这也意味着如果您的任务之一在运行期间更改了块条件,则每次都会重新评估。以下面的例子为例:

- 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
Run Code Online (Sandbox Code Playgroud)

在这种情况下,块的最后一个任务将被跳过,block_condition就像false在运行时评估的那样。