2015-06-17 80 views
0

我正在構建一個需要存在一組變量並且還要求變量不等於bar的遊戲。下面是我的額外變量定義的例子:檢查變量的存在性和值

ansible.extra_vars = { 
    A: "foo", 
    B: "bar", 
    C: "foo", 
    ... 
} 

當我玩跑,我看到了下面當我打印調試消息爲每個項目:

(item=A) => { 
    "item": "A", 
    "var": { 
     "A": "foo" 
    } 
} 

當我嘗試下面的評測,我希望在B中的失敗,但是,所有的測試都通過了:

- fail: msg="bar is not a valid variable value for this play" 
    with_items: required_vars 
    when: var.{{ item }} is not defined or (var.{{ item }} is defined and var.{{ item }} == "bar") 

沒有人有任何建議什麼,我需要做評估值和導致失敗時遇到了?

+0

你有沒有試着用'變種[項目]'?雖然我不確定'var'從哪裏來。 – udondan

+0

我從粘貼的第二個代碼塊中獲得了'var'。我剛剛嘗試過'var [item]',並且效果與之前一樣。 –

+0

你在哪裏/如何定義'ansible.extra_vars'? – udondan

回答

1

extra_vars似乎是一個字典,所以你應該使用with_dict而不是with_items。我不確定你是如何定義extra_vars的。當我在下面的劇本中定義它時,我得到了不同於調試的輸出。當我在group_vars文件中將它定義爲(ansible.extra_vars)時,我根本沒有收到任何Playbook中的數據。

此外,當我一起用我的字典extra_varswith_items我得到以下錯誤:

fatal: [localhost] => with_items expects a list or a set

所以似乎對你的extra_vars一些奇怪的事情。

這是我的工作例如:

--- 

- hosts: 
    - localhost 

    gather_facts: no 

    vars: 
    extra_vars: { 
     A: "foo", 
     B: "bar", 
     C: "foo" 
    } 

    tasks: 
    - debug: var=extra_vars 
    - debug: msg="{{ item.key }}" 
    with_dict: extra_vars 
    when: item.value is not defined or (item.value is defined and item.value == "bar") 

... 

輸出:

PLAY [localhost] ************************************************************** 

TASK: [debug var=extra_vars] ************************************************** 
ok: [localhost] => { 
    "var": { 
     "extra_vars": { 
      "A": "foo", 
      "B": "bar", 
      "C": "foo" 
     } 
    } 
} 

TASK: [debug msg="{{ item.key }}"] ******************************************** 
skipping: [localhost] => (item={'key': 'A', 'value': 'foo'}) 
skipping: [localhost] => (item={'key': 'C', 'value': 'foo'}) 
ok: [localhost] => (item={'key': 'B', 'value': 'bar'}) => { 
    "item": { 
     "key": "B", 
     "value": "bar" 
    }, 
    "msg": "B" 
} 

PLAY RECAP ******************************************************************** 
localhost     : ok=2 changed=0 unreachable=0 failed=0