0

我在一位同事的旧角色中包含以下内容。

---
- 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 版本(几周前升级)。此角色在升级前执行良好。

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

4

1 回答 1

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 注意到的那样,include总是包含所有任务,然后将when条件应用于每个任务。因此,--list-tasks您将始终看到所有任务。但是,它们不会在实际运行中执行。

于 2016-10-09T01:42:48.763 回答