在 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/