块内任务的附加条件

时间:2017-10-03 11:45:22

标签: ansible ansible-2.x

我试图将某些条件中的任务包含在块中。此块中的一些任务还有其他条件。 问题是这些任务(带有附加条件)被跳过。阻止条件和所有附加条件均为真。

下面是一个示例游戏:

- 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中不仅可以使用附加条件来封闭任务吗?

1 个答案:

答案 0 :(得分:3)

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

  

也许在Ansible 2.4中不仅可以附加附加条件的任务吗?

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: