是否阻止了内部的支持条件

时间:2019-08-07 12:14:20

标签: ansible ansible-2.x

我对此怀疑,是否支持这种情况。 场景-块具有条件和时间。 块中的任务再次具有其他条件(何时)。 例如: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

1 个答案:

答案 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