我正在构建一个需要存在一组变量的游戏,并且还要求变量不等于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
时,是否有人对我需要做些什么来评估价值并导致失败?
答案 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