Ansible执行all包括角色

时间:2016-10-07 16:35:40

标签: ansible ansible-role

我有以下内容包括一位同事的旧角色。

---
- name: deploy
  include: deploy.yml
  when: deploy is defined and  deploy == 'True'

- name: undeploy
  include: undeploy.yml
  when: undeploy is defined and undeploy == 'True'

- name: database-migrate
  include: database-migrate.yml
  when: db is defined and db == 'True'

然而,无论我如何包含角色,Ansible都会自动处理每个包含。我可以使用 - list-tasks 选项验证这一点。

例如在我的剧本中我有以下

  roles:
    - { role: vip-notification-services-app, deploy: 'True', tags: ['deploy']}

我运行的是2.1.1.0版本(几周后升级)。在升级之前,此角色正常运行。

因此,我想知道这种角色包含在一个角色中是否不再允许,或者我需要使用一些不同的语法。

1 个答案:

答案 0 :(得分:1)

--list-tasks选项,它不会为其结果评估when条件。

也就是说,如果您有playbook.yml

---
- hosts: localhost
  connection: local
  tasks:
    - debug:
      when: false

ansible-playbook playbook.yml --list-tasks将显示:

playbook: test.yml

  play #1 (localhost): localhost    TAGS: []
    tasks:
      debug TAGS: []

虽然debug任务永远不会运行(如果将条件更改为with: true,结果不会更改。)

作为Konstantin Suvorov noticedinclude始终包含所有任务,然后将when条件应用于每项任务。因此,在--list-tasks结果中,您将始终看到所有任务。然而,他们不会被真正的执行。