Ansible 中的 UNDEF 关键字

UNDEF Keyword in Ansible

在 Ansible 中,我试图在 Ansible 中使用 UNDEF 关键字作为未定义的变量,当变量本身未根据此处提供的 link 定义时用默认值覆盖 reference document for Ansible

令我沮丧的是,没有看到任何实际的剧本或角色使用它的例子。有没有人有使用UNDEF关键字作为变量并在变量未定义时使用默认值定义的实际例子?

我已经使用 not defined 和 undefined when 条件使用 jinja 2 模板。这更多是关于 UNDEF 关键字本身。

你在这里混合了两种东西:

  • 当变量未定义时,Ansible 错误中有自定义提示的可能性会增加,undef keyword
  • 在未定义变量时定义 default 的可能性。

这两个概念基本上是互斥的,因为具有 default 的变量永远不应该是未定义的,也不应该导致 Ansible 引发错误。
虽然,根据您放置 default 的位置,Ansible 流程变量的方式可能使 undef 优先,并且,如果您调用包含 undef 的角色,则错误将总是被提高。

例如,角色变量文件包含:

demo_variable: "{{ undef(hint='Please provide a demo variable') | default('Defeat `undef` purpose') }}"

几乎没有意义,因为默认值始终优先。


这是一个使用 undef 关键字的简单角色。

roles/demo/vars/main.yml:

demo_variable: "{{ undef(hint='Please provide a demo variable') }}"

roles/demo/tasks/main.yml:

- debug:
    msg: "{{ demo_variable }}"

剧本:

- hosts: localhost
  gather_facts: no

  roles:
    - role: demo      

如果按原样使用,将引发:

The task includes an option with an undefined variable. 
The error was: {{ undef(hint='Please provide a demo variable') }}: Please provide a demo variable
  
The error appears to be in '/usr/local/ansible/roles/demo/tasks/main.yml': line 1, column 3, 
but may be elsewhere in the file depending on the exact syntax problem.

与不使用 undef 关键字的未定义变量相反:

The task includes an option with an undefined variable. 
The error was: 'demo_variable' is undefined
 
The error appears to be in '/usr/local/ansible/roles/demo/tasks/main.yml': line 1, column 3, 
but may be elsewhere in the file depending on the exact syntax problem.

另一方面,如果您想要默认值,则必须删除变量的定义,包括 variable/main 中的 undef 关键字。 yml 文件,并有一个 tasks/main.yml ,内容为:

- debug:
    msg: "{{ demo_variable | default('Defeat `undef` purpose') }}"

然后这将给出预期的结果:

TASK [demo : debug] *********************************************************
ok: [localhost] => 
  msg: Defeat `undef` purpose

当变量未在调用此角色的剧本级别定义时。