常见问题之一是在条件语句中使用了未定义的变量。在这种情况下,Ansible会将未定义的变量解析为一个空字符串,并将条件语句视为False。例如,在下面的playbook中:
vars:
my_var: "foo"
tasks:
- name: Set fact
set_fact:
my_fact: "bar"
- name: Conditional
debug:
msg: "Conditional is True"
when: my_var == my_fact
如果my_var未定义,Ansible会将条件my_var == my_fact解析为False,因为my_var解析为空字符串。您可以通过通过在条件语句中使用default
过滤器来避免这个问题,例如:
vars:
my_var: "foo"
tasks:
- name: Set fact
set_fact:
my_fact: "bar"
- name: Conditional
debug:
msg: "Conditional is True"
when: (my_var | default('')) == (my_fact | default(''))
在这个重写的示例中,使用了default
过滤器,它会将my_var和my_fact中的未定义变量解析为一个空字符串,然后比较这两个字符串,这样条件my_var == my_fact就可以按预期运行了。