检查变量的存在性和价值

时间:2015-06-17 16:44:49

标签: ansible

我正在构建一个需要存在一组变量的游戏,并且还要求变量不等于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")

在遇到bar时,是否有人对我需要做些什么来评估价值并导致失败?

1 个答案:

答案 0 :(得分:2)

extra_vars似乎是一个词典,所以你应该使用with_dict代替with_items

我不确定你是如何定义extra_vars的。当我在下面的剧本中定义它时,我得到调试的不同输出。当我在ansible.extra_vars文件中定义它(group_vars)时,我根本没有在剧本中获得任何数据。

此外,当我将extra_vars dict与with_items一起使用时,我收到以下错误:

  

致命:[localhost] => with_items需要一个列表或一组

所以你的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