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
当变量未在调用此角色的剧本级别定义时。
在 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
当变量未在调用此角色的剧本级别定义时。