当第一次失败时,ansible条件验证不会跳过其余条件

时间:2016-01-18 17:01:46

标签: python jinja2 ansible

但是,如果未在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

2 个答案:

答案 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提供了很好的暗示!