为什么ansible未定义的变量不算作剧本的错误?

时间:2016-03-22 15:01:06

标签: ansible ansible-2.x

使用简单的剧本:

---
- hosts: all
  tasks:
    - debug: var=not_existing_var

我得到了

ok: [compute01] => {
    "not_existing_var": "VARIABLE IS NOT DEFINED!"
}

并且ansible-playbook的退出代码变为0.但为什么呢?为什么是ok? 当任何未定义的变量以这种方式定义时,这是正常的吗?

还有第二个问题:我如何解决这个问题并得到我的错误?

1 个答案:

答案 0 :(得分:2)

这是预期的行为。我无法解释为什么它是如何以同样的方式解释为什么它在应用程序X中的处理方式不同。这是开发人员的设计决策。但我相信这是一个很好的功能,因为您可以使用这两个过滤器详细定义未定义变量应该发生什么:

  1. <强>强制

    如果需要变量,只需添加强制过滤器:

    not_existing_var | mandatory

    这将使Ansible立即失败,并抱怨丢失的变量。

    文档:Forcing Variables To Be Defined

  2. 默认

    如果变量未设置如下,则可以提供默认值:

    not_existing_var | default("the default value")

    文档:Defaulting Undefined Variables

  3. 如果此行为不舒服并且您希望所有未定义的变量都导致错误,您可以define this in you ansible.cfg

    error_on_undefined_vars=True