ansible - Ansible 中的 UNDEF 关键字

标签 ansible jinja2

在 Ansible 中,当变量本身未根据此处提供的链接 reference document for Ansible 定义时,我尝试对 Ansible 中 undefined variable 使用 UNDEF 关键字来覆盖默认值。

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

我已经使用过使用 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 的 undefined variable 相反会引发的关键字:

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.

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

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

然后这将给出预期的:

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

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

关于ansible - Ansible 中的 UNDEF 关键字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70732499/

相关文章:

ansible - 最后修改的文件只移动了ansible?

来自打包脚本的 Ansible 变量

python - 无效的 block 标记 : 'set'

python - Flask - 访问模板中的配置变量

javascript - ReactJS - 多行文本区域

ansible - 以最有效的方式删除多个文件(ansible)

windows - 通过ssh ping Windows时如何修复 “Unreachable”?

python - Apache Airflow : Pass variable in jinja include

python - 将 {% include %} 的输出分配给 Jinja2 中的变量

Ansible 角色之间共享文件