为什么 ansible 未定义变量不算作 playbook 的错误?
Why ansible's not definied variable not counts as a error for playbook?
使用简单的剧本:
---
- hosts: all
tasks:
- debug: var=not_existing_var
我得到了
ok: [compute01] => {
"not_existing_var": "VARIABLE IS NOT DEFINED!"
}
而ansible-playbook
的退出代码变为0。但是为什么呢?为什么是ok
?
任意个未定义变量这样定义正常吗?
第二个问题:我该如何解决这个问题并得到我的错误?
这是预期的行为。我无法解释为什么会这样,就像我无法解释为什么它在应用程序 X 中的处理方式不同一样。这是开发人员的设计决定。但我相信这是一个很好的功能,因为您可以使用这两个过滤器详细定义未定义变量应该发生什么:
强制性
如果需要变量,只需添加强制过滤器:
not_existing_var | mandatory
这将使 Ansible 立即失败并抱怨缺少变量。
默认
如果变量不是这样设置的,您可以提供一个默认值:
not_existing_var | default("the default value")
如果这种行为令人不舒服并且您希望所有未定义的变量都导致错误,您可以define this in you ansible.cfg
:
error_on_undefined_vars=True
使用简单的剧本:
---
- hosts: all
tasks:
- debug: var=not_existing_var
我得到了
ok: [compute01] => {
"not_existing_var": "VARIABLE IS NOT DEFINED!"
}
而ansible-playbook
的退出代码变为0。但是为什么呢?为什么是ok
?
任意个未定义变量这样定义正常吗?
第二个问题:我该如何解决这个问题并得到我的错误?
这是预期的行为。我无法解释为什么会这样,就像我无法解释为什么它在应用程序 X 中的处理方式不同一样。这是开发人员的设计决定。但我相信这是一个很好的功能,因为您可以使用这两个过滤器详细定义未定义变量应该发生什么:
强制性
如果需要变量,只需添加强制过滤器:
not_existing_var | mandatory
这将使 Ansible 立即失败并抱怨缺少变量。
默认
如果变量不是这样设置的,您可以提供一个默认值:
not_existing_var | default("the default value")
如果这种行为令人不舒服并且您希望所有未定义的变量都导致错误,您可以define this in you ansible.cfg
:
error_on_undefined_vars=True