2015-06-17 58 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