在Ansible中,模板尝试计算未使用条件分支中的变量是正常行为。这是因为Ansible模板引擎会在渲染模板时对所有的变量进行求值,而不仅仅是根据条件分支的结果来决定是否使用某个变量。
如果你希望在条件分支中避免计算未使用的变量,可以使用when
语句来限制变量的使用范围。下面是一个示例代码:
- hosts: localhost
gather_facts: False
tasks:
- name: Set variables
set_fact:
var1: "This is var1"
var2: "This is var2"
var3: "This is var3"
- name: Render template
template:
src: template.j2
dest: /tmp/result.txt
when: var1 is defined or var2 is defined
上面的代码中,set_fact
模块用来设置变量var1
,var2
和var3
。然后,template
模块使用条件语句when
来限制只有当var1
或var2
被定义时才渲染模板。
在模板文件template.j2
中,你可以使用var1
和var2
,而不用担心未使用的变量var3
会被计算:
{% if var1 is defined %}
var1: {{ var1 }}
{% endif %}
{% if var2 is defined %}
var2: {{ var2 }}
{% endif %}
这样,只有当变量var1
或var2
被定义时,模板才会渲染相应的部分,避免了计算未使用的变量。