是否打印Ansible中每个项目的外壳输出?

是否打印Ansible中每个项目的外壳输出?,ansible,ansible-playbook,ansible-2.x,Ansible,Ansible Playbook,Ansible 2.x,我想使用Ansible中的“with_items”构造执行几个命令。如果命令失败,我想打印它的标准输出。我举了一个简单的例子来说明这个问题 - action: shell echo {{item}} with_items: - 1 - 2 register: task - debug: var=item.stdout_lines with_items: "{{task.results}}" 问题是不仅打印标准输出行。我怎样才能解决这个问题 如果命令失败,我想打印它的标准输

我想使用Ansible中的“with_items”构造执行几个命令。如果命令失败,我想打印它的标准输出。我举了一个简单的例子来说明这个问题

- action: shell echo {{item}}
  with_items:
  - 1
  - 2
  register: task

- debug: var=item.stdout_lines
  with_items: "{{task.results}}"
问题是不仅打印标准输出行。我怎样才能解决这个问题

如果命令失败,我想打印它的标准输出

如果shell以非零状态退出,那么Ansible将在该错误时退出

话虽如此,如果你改变

- debug: var=item.stdout_lines
  with_items: "{{task.results}}"

这将打印所有输出行,而不显示结果字典中的所有其他信息。

您也可以使用

输出:

ap test.yml -c local -i 'localhost, '

PLAY [all] *********************************************************************

TASK [setup] *******************************************************************
ok: [localhost]

TASK [test] ********************************************************************
fatal: [localhost]: FAILED! => {"changed": true, "cmd": "date; /bin/false", "delta": "0:00:00.011686", "end": "2016-11-23 11:43:26.554559", "failed": true, "rc": 127, "start": "2016-11-23 11:43:26.542873", "stderr": "/bin/sh: /bin/false: No such file or directory", "stdout": "Wed 23 Nov 2016 11:43:26 GMT", "stdout_lines": ["Wed 23 Nov 2016 11:43:26 GMT"], "warnings": []}

TASK [debug] *******************************************************************
ok: [localhost] => {
    "cmd_reg": {
        "changed": true,
        "cmd": "date; /bin/false",
        "delta": "0:00:00.011686",
        "end": "2016-11-23 11:43:26.554559",
        "failed": true,
        "rc": 127,
        "start": "2016-11-23 11:43:26.542873",
        "stderr": "/bin/sh: /bin/false: No such file or directory",
        "stdout": "Wed 23 Nov 2016 11:43:26 GMT",
        "stdout_lines": [
            "Wed 23 Nov 2016 11:43:26 GMT"
        ],
        "warnings": []
    }
}

PLAY RECAP *********************************************************************
localhost                  : ok=2    changed=0    unreachable=0    failed=0
注意事项:

  • 如果需要手动使构建失败,则需要使构建失败,因为本手册假定一切正常
  • 使用打印出所需的所有内容-这是块的简单图示
  • ---
      - hosts: all
    
        tasks:
          - block:
            - name: test
              shell: date; /bin/false
              register: cmd_reg
            rescue:
              - debug: var=cmd_reg
              # fail the build ?
    
    ap test.yml -c local -i 'localhost, '
    
    PLAY [all] *********************************************************************
    
    TASK [setup] *******************************************************************
    ok: [localhost]
    
    TASK [test] ********************************************************************
    fatal: [localhost]: FAILED! => {"changed": true, "cmd": "date; /bin/false", "delta": "0:00:00.011686", "end": "2016-11-23 11:43:26.554559", "failed": true, "rc": 127, "start": "2016-11-23 11:43:26.542873", "stderr": "/bin/sh: /bin/false: No such file or directory", "stdout": "Wed 23 Nov 2016 11:43:26 GMT", "stdout_lines": ["Wed 23 Nov 2016 11:43:26 GMT"], "warnings": []}
    
    TASK [debug] *******************************************************************
    ok: [localhost] => {
        "cmd_reg": {
            "changed": true,
            "cmd": "date; /bin/false",
            "delta": "0:00:00.011686",
            "end": "2016-11-23 11:43:26.554559",
            "failed": true,
            "rc": 127,
            "start": "2016-11-23 11:43:26.542873",
            "stderr": "/bin/sh: /bin/false: No such file or directory",
            "stdout": "Wed 23 Nov 2016 11:43:26 GMT",
            "stdout_lines": [
                "Wed 23 Nov 2016 11:43:26 GMT"
            ],
            "warnings": []
        }
    }
    
    PLAY RECAP *********************************************************************
    localhost                  : ok=2    changed=0    unreachable=0    failed=0