块内任务的附加条件

Additional conditions for tasks inside a block

我正在尝试使用一些 when 条件将任务包含在块中。此块内的某些任务还有其他条件。 问题是这样的任务(有附加条件)被跳过了。块的条件和所有附加条件都为真。

下面有一个样例播放:

- block:    

    - set_fact: 
        packages_to_install: "{{ packages_to_install }} + [ '{{ (distrs.stdout | from_json).postgresql }}' ]"

    - set_fact:
        packages_to_install: "{{ packages_to_install }} + [ '{{ (distrs.stdout | from_json).webserver }}' ]"
  when:
    - server.webserver is defined
    - server.webserver == true   

  when:
    - server is defined

因此,postgresql 被添加到软件包列表中,但 webserver 没有。

根据 the docs,块 内的所有任务将在附加块中的 when 条件并在任务的上下文 中对其进行评估后执行。 也许在 Ansible 2.4 中不仅可以包含附加条件的封闭任务?

您应该修复 when 声明的缩进。

Maybe it's not just possible in Ansible 2.4 to have enclosed tasks with additional conditions?

Ansible 2.4 工作正常:

tasks:
  - block:

    - debug:
        msg: "task 1"

    - debug:
        msg: "task 2"
      when: false

    - debug:
        msg: "task 3"
      when: true

    when: true

结果:

TASK [debug] **************************************************************************************************
ok: [localhost] => {
    "msg": "task 1"
}

TASK [debug] **************************************************************************************************
skipping: [localhost]

TASK [debug] **************************************************************************************************
ok: [localhost] => {
    "msg": "task 3"
}

为了清楚起见,您随时可以重新排列 block 任务中的键:

tasks:
  - when: true
    block:
      - debug: