2016-01-18 15 views
0

如果vlan變量沒有被定義在ansible中,然而在下面的情況下,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

您遇到的問題來自於試圖用{{ }}訪問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]' 
+0

根據你的建議,我得到了以下問題: msg:VLAN 2333不在[1,4094] – Chenww

+0

的範圍內這是什麼時候沒有定義VLAN?我運行了一個樣本,當vlan未定義時,任務被跳過 –

+0

當我將vlan定義爲值2333時,會發生這種情況。可能與字符串或數字有關? – Chenww

1

令人驚訝的我必須使用以下格式用 「-e VLAN = 2333」 通過下列條件:
時:定義VLAN和(VLAN |詮釋< 1或VLAN | INT> 4094)

謝謝安德魯偉大的提示!