我想要一个角色被包含在我的Ansible剧本,如果一个变量值为真,如果它是假不执行。我认为这应该工作,但即使run_integration_test
是false
,集成测试也会运行
- 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
注意在这个例子中when
和tags
是对齐的。
这里有一个陷阱,你可能会遇到取决于你如何设置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
过滤器