但是,如果未在ansible中定义vlan
变量,则在下列情况下,ansible仍将失败。在其他语言中,如果第一个条件失败,则应忽略其余条件(短路)。如何在Ansible中解决这个问题?
- name: Validate vlan ID
when: vlan is defined and ({{ vlan }} < 1 or {{ vlan }} > 4094)
fail: msg='VLAN {{vlan}} is not in the range of [1, 4094]'
File "/usr/lib/python2.7/dist-packages/jinja2/runtime.py", line 485, in _fail_with_undefined_error
raise self._undefined_exception(hint)
UndefinedError: 'vlan' is undefined
答案 0 :(得分:2)
您遇到的问题来自尝试使用{{ }}
访问vlan的内容。如果您将任务更新为以下语法,则将跳过该任务。
- name: Validate vlan ID
when: vlan is defined and (vlan < 1 or vlan > 4094)
fail: msg='VLAN {{vlan}} is not in the range of [1, 4094]'
答案 1 :(得分:1)
令人惊讶的是,我必须使用以下格式“-e vlan = 2333”来传递以下条件:
when:定义vlan并且(vlan | int&lt; 1或vlan | int&gt; 4094)
感谢Andrew提供了很好的暗示!