Ansible条件总是计算为false

时间:2015-03-05 16:32:53

标签: ansible ansible-playbook

我正在尝试检查指定错误的特定字符串的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

2 个答案:

答案 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中运行