我有以下内容包括一位同事的旧角色。
---
- 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版本(几周后升级)。在升级之前,此角色正常运行。
因此,我想知道这种角色包含在一个角色中是否不再允许,或者我需要使用一些不同的语法。
答案 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 noticed,include
始终包含所有任务,然后将when
条件应用于每项任务。因此,在--list-tasks
结果中,您将始终看到所有任务。然而,他们不会被真正的执行。