包含角色,如果变量为真



我想要一个角色被包含在我的Ansible剧本,如果一个变量值为真,如果它是假不执行。我认为这应该工作,但即使run_integration_testfalse,集成测试也会运行

- include_role:
name: integration_test
when: "{{ run_integration_test }}"
tags:
- configure_integration
- aws

正确的做法是什么?

您有一个缩进问题:when是一个任务选项,而不是include_role的参数。你需要写:

- include_role:
name: integration_test
when: run_integration_test
tags:
- configure_integration
- aws

注意在这个例子中whentags是对齐的。


这里有一个陷阱,你可能会遇到取决于你如何设置run_integration_test。您可以尝试这样运行:

ansible-playbook -e run_integration_test=false ...

你会惊讶地发现任务还在运行。在上面的命令行中,我们将run_integration_test设置为字符串值"false"而不是布尔值false,非空字符串的计算结果为true。处理这个问题的一种方法是像这样编写when表达式:

when: "run_integration_test|default(false)|bool"

这将(a)如果run_integration_test未发送则默认为false,并且(b)将强制转换字符串值"true"one_answers";false"到正确的布尔值,使用bool过滤器

最新更新