ansible中的block是否支持其中的条件语句

ansible中的block是否支持其中的条件语句,ansible,ansible-2.x,Ansible,Ansible 2.x,我怀疑ansible是否支持这种情况。 场景-块有一个带有when的条件。 块内的任务还有更多的条件(when)。 任务的main.yml已经完成 - block: - name: task 1 shell: check_install when: ansible_distribution == 'CentOS' - name: task 2 shell: echo "test task" when: out.rc >

我怀疑ansible是否支持这种情况。 场景-块有一个带有when的条件。 块内的任务还有更多的条件(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
根据ansible文件

您可以应用于单个任务的大部分内容(除了 循环)可以应用于块级别,这也使得 更容易设置任务通用的数据或指令。这是不可能的 表示指令影响块本身,但由 由块包围的任务。i、 e.a何时将应用于任务, 不是街区本身

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

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\u condition
将求值为
false

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

如果在块级别有一个条件,在任务级别有另一个条件,那么它们都将在任务运行时进行计算

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

- 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_条件
将评估为
false

什么阻止您测试它?+1关于@VladimirBotka的问题。。。您还询问了一个与ansible block文档中第一个示例相同的用法问题。@VladimirBotka我已经问过了&只需要确认我的理解是否正确correct@RobH不,那是不正确的。在have conditional for任务中没有一个示例。仅设置块级条件。我需要澄清的是,这两个条件都像and运算符一样进行计算。@user2700022:下次与我们共享结果并使其生效。Zeitounator为你做的是什么阻止你测试它?@VladimirBotka的问题+1。。。您还询问了一个与ansible block文档中第一个示例相同的用法问题。@VladimirBotka我已经问过了&只需要确认我的理解是否正确correct@RobH不,那是不正确的。在have conditional for任务中没有一个示例。仅设置块级条件。我需要澄清的是,这两个条件都像and运算符一样进行计算。@user2700022:下次与我们共享结果并使其生效。Zeitounator为你做的。