我正在尝试检查指定错误的特定字符串的shell命令的输出,并且应该终止该剧本。
我正在尝试调试它:
- debug: var=foo_result
- debug: msg={{ 'Some error text' in foo_result }}
在此示例中,注册了install_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
答案 0 :(得分:0)
你几乎拥有它。您希望在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版本):
TASK: [debug var=foo_result] **************************************************
ok: [localhost] => {
"foo_result": {
"changed": "true",
"msg": "all items completed",
"results": {
"changed": "true",
"stderr": "",
"stdout": ".... Some error text ..."
}
}
}
TASK: [debug msg=False] *******************************************************
ok: [localhost] => {
"msg": "False"
}
TASK: [debug msg=True] ********************************************************
ok: [localhost] => {
"msg": "True"
}
答案 1 :(得分:0)
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"
我不需要参考results[0]
。我不知道这种差异是什么。我不知道为什么如果我从注册它的同一个任务和另一个任务访问它,那么访问foo_result
似乎会有所不同。
也许这是在更新版本中修复的,但这是我需要做的才能让它在1.6.10中运行