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
。调试消息确认额外的变量正在运行时写入剧本。您如何将该值填充到所需的变量中?