Ansible条件的计算结果始终为false

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:

我正在尝试检查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: [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"