Ansible 检查变量的存在性和值

Ansible 检查变量的存在性和值,ansible,Ansible,我正在构建一个剧本,要求存在一组变量,并且要求变量不等于bar。下面是我对额外变量定义的示例: ansible.extra_vars = { A: "foo", B: "bar", C: "foo", ... } 当播放运行时,当我为每个项目打印调试消息时,我会看到以下内容: (item=A) => { "item": "A", "var": { "A": "foo" } } 当我尝试以下评估时,我预计B会失败,但

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

如果遇到
条形图
,是否有人对我需要如何评估该值并导致故障有任何建议?

额外变量
似乎是一个dict,因此你应该使用
和dict
而不是
和项目

我不知道你到底是如何定义额外变量的。当我在下面的剧本中定义它时,我从调试中得到了不同的输出。当我在
group\u vars
文件中这样定义(
ansible.extra\u vars
)时,我在剧本中根本没有任何数据

此外,当我将我的
extra\u vars
dict与
with\u items
一起使用时,我得到以下错误:

致命:[localhost]=>带有\u项需要列表或集合

因此,您的
额外变量似乎有些奇怪

以下是我的工作示例:

---

- 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   

您是否尝试使用
var[item]
?虽然我不确定
var
从哪里来,但我从粘贴的第二个代码块中得到了
var
。我刚刚尝试了
var[item]
,效果与以前一样。您在何处/如何定义运行时使用的配置文件中定义的
ansible.extra_vars
。调试消息确认额外的变量正在运行时写入剧本。您如何将该值填充到所需的变量中?