Ansible条件的计算结果始终为false
我正在尝试检查shell命令的输出,以查找指示错误的特定字符串,并且应该终止playbook 我正在尝试对其进行如下调试:Ansible条件的计算结果始终为false,ansible,ansible-playbook,Ansible,Ansible Playbook,我正在尝试检查shell命令的输出,以查找指示错误的特定字符串,并且应该终止playbook 我正在尝试对其进行如下调试: - debug: var=foo_result - debug: msg={{ 'Some error text' in foo_result }} 在本例中,install\u result已注册以包含命令的输出,它确实: TASK: [do_stuff | debug var=foo_result] **************************** ok:
- debug: var=foo_result
- debug: msg={{ 'Some error text' in foo_result }}
在本例中,install\u result
已注册以包含命令的输出,它确实:
TASK: [do_stuff | debug var=foo_result] ****************************
ok: [some-node] => {
"foo_result": {
"changed": true,
"msg": "All items completed",
"results": [
{
"changed": true,
[Snip..]
"stderr": "",
"stdout": "...Some error text..."
}
]
}
}
第二条调试语句检查foo_result
中的“某些错误文本”,其计算结果总是“false”
我仍然觉得Ansible语法有点混乱,我不确定我在这里做错了什么
Ansible版本:1.6.10您几乎拥有了它。您需要在foo_result.results.stdout中测试输出,而不仅仅是在foo_result中。从这个例子中:
- debug: var=foo_result
- debug: msg={{ 'Some error text' in foo_result }}
- debug: msg={{ 'Some error text' in foo_result.results.stdout }}
我们得到以下输出(我运行的是1.7.2版):
Ansible很奇怪。也许我只是没有“理解”它 请注意,在原始输出中,
foo_install.results
包含一个带有单个元素的数组。如果要调试或测试文本的stdout
,可以这样做:
- debug: msg={{ 'My Error' in foo_result.results[0].stdout }}
when: foo_result.changed
注意,我必须添加数组索引符号才能正确地打印“true”
但如果我这样做:
- name: Do Foo Stuff
shell: /some/path/to/some/command
register: foo_result
failed_when: "'My Error' in foo_result.stdout"
我不需要参考结果[0]
。我不知道这是怎么回事。我不知道为什么从注册它的同一个任务访问foo_result
与从另一个任务访问它时,它的工作方式似乎有所不同
也许这在最近的版本中已经修复了,但这是我在1.6.10中需要做的事情,以使其在1.6.10中正常工作。不,我遇到了这个错误:无法在模板字符串中查找名称或访问属性。确保变量名不包含诸如“-”之类的无效字符。如果我在foo_result.results.stdout}中使用了{{'some error}
- name: Do Foo Stuff
shell: /some/path/to/some/command
register: foo_result
failed_when: "'My Error' in foo_result.stdout"